我正在编写一个库存管理软件,该软件使用数据库来存储数据。我确实想进行循环查询以使接口保持最新。此外,我想在其他线程中执行查询,以避免阻塞gui。
到目前为止,我已经可以使用GUI了,并将由sqlalchemy管理的查询移到了不同的线程上。 GUI加载并由数据填充。不幸的是,当我尝试重新查询和更新时,发生了错误SQLite objects created in a thread can only be used in that same thread
。
def init_threads(self):
self.data_thread = QtCore.QThread()
self.mydata = Main_data()
self.mydata.moveToThread(self.data_thread)
self.data_thread.start()
self.mydata.getchemical_finished.connect(self.update_result)
def init_connections(self):
self.reset_btn.clicked.connect(self.mydata.getchemical)
class Main_data(QtCore.QObject):
getchemical_finished = QtCore.pyqtSignal()
def __init__(self):
super(QtCore.QObject, self).__init__()
self.engine = db.create_engine('data.db')
self.session = sessionmaker(bind=self.engine)()
@QtCore.pyqtSlot()
def getchemical(self, chemical_id=None, chemical_name=None):
if all(v is None for v in [chemical_id, chemical_name]):
self.mychemicals = self.session.query(Chemical).all()
elif chemical_name is not None:
self.mychemical = self.session.query(Chemical).filter(Chemical.name == chemical_name).first()
elif chemical_id is not None:
self.mychemical = self.session.query(Chemical).filter(Chemical.id == chemical_id).first()
self.getchemical_finished.emit()
我试图在函数get_chemical中使用sess = scoped_session(self.session),但这并没有改变任何东西。 我已经阅读过使用flask-sqlalchemy,但是我以前从未使用过,我想知道,这是否正确?最好和最有效的方法是什么?为了实现对接口的更新,我将启动另一个线程,每x秒触发一次更新。
〜法比安