注意:这里需要使用python的with语法,类似C#中的using
from PyQt5.QtWidgets import QMessageBox
from PyQt5.QtSql import QSqlDatabase, QSqlQuery
import os
TABLE_NAME = 'predict_items'
DB_PATH="./db/"
DB_FINE_NAME="database.db"
DEFAULT_CONNECTION='qt_sql_default_connection'
class SqliteHelper(object):
# def __init__(self,connect_name):
# self.connect_name=
def __enter__(self):
self.db =QSqlDatabase.database(DEFAULT_CONNECTION) if QSqlDatabase.contains(DEFAULT_CONNECTION) else QSqlDatabase.addDatabase('QSQLITE')
self.db.setDatabaseName('./db/database.db')
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print('exit')
if self.db is not None:
self.db.close()
#在结束使用时一定要确保删除db对象
del self.db
QSqlDatabase.removeDatabase(DEFAULT_CONNECTION)
def insert(self,key, data):
if not os.path.exists(DB_PATH):
os.mkdir(DB_PATH)
if not os.path.exists(DB_PATH+DB_FINE_NAME):
self.__createDB()
self.__open_db()
query = QSqlQuery()
query.exec_(f"insert into {TABLE_NAME} values('{key}', '{data}')")
print('insert data to db success!')
def __open_db(self):
if not self.db.open():
QMessageBox.critical(None, ("无法打开数据库连接"), ("无法建立到数据库的连接,这个例子需要SQLite支持"), QMessageBox.Cancel)
def __createDB(self):
self.__open_db()
query = QSqlQuery()
query.exec_(f"create table {TABLE_NAME}(key int primary key, data text)")
print('create db success!')
return True
def query(self,key):
self.__open_db()
query = QSqlQuery()
sql_str=f"select * from {TABLE_NAME} where key='{str(key)}'"
if query.exec_(sql_str) and query.next():
return query.value(0),query.value(1)