【发布时间】:2019-04-15 23:52:04
【问题描述】:
我正在尝试从通过此代码添加到数据库的数据库中加载数据PyQt integration with Sqlalchemy。我希望将数据库中的数据显示到表格中。我已经尝试过此代码.但是,我没有让它适当地加载数据。我认为 SqlAlchemy 查询可能是错误的。 任何帮助将不胜感激。
我收到此错误:
File "/Users/tunji/Desktop/plain.py", line 75, in load
result = session(Employee).query.all()
NameError: global name 'Employee
但是当我更新这行代码时:
from employee import Employee
我现在遇到这个错误:
Traceback(最近一次调用最后一次):文件“plain.py”,第 82 行,加载中 for column_number,data in enumerate(row_data): TypeError: 'Employee' object is not iterable
# Form implementation generated from reading ui file 'plain.ui'
#
# Created by: PyQt4 UI code generator 4.12.1
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, MetaData,Table
from sqlalchemy.orm import mapper,Session
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(_fromUtf8("MainWindow"))
MainWindow.resize(800, 576)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.tableWidget = QtGui.QTableWidget(self.centralwidget)
self.tableWidget.setGeometry(QtCore.QRect(220, 120, 256, 192))
self.tableWidget.setRowCount(15)
self.tableWidget.setColumnCount(3)
self.tableWidget.setObjectName(_fromUtf8("tableWidget"))
self.btn_load = QtGui.QPushButton(self.centralwidget)
self.btn_load.setGeometry(QtCore.QRect(310, 390, 113, 32))
self.btn_load.setObjectName(_fromUtf8("btn_load"))
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName(_fromUtf8("statusbar"))
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
self.btn_load.setText(_translate("MainWindow", "Load", None))
Base = declarative_base()
engine = sqlalchemy.create_engine("sqlite:///employee.db", echo='debug')
Base.metadata.create_all(engine)
metadata = MetaData()
DBsession = sqlalchemy.orm.sessionmaker(bind=engine)
session = DBsession()
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.btn_load.clicked.connect(self.load)
@QtCore.pyqtSlot()
def load(self):
#esult = Table('employees',metadata,autoload=True,autoload_with=engine)
result = session(Employee).query.all()
self.tableWidget.setRowCount(0)
for row_number,row_data in enumerate(result):
self.tableWidget.insertRow(row_number)
for column_number,data in enumerate(row_data):
self.tableWidget.setItem(row_number,column_number,QtGui.QTableWidgetItem(str(data)))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
m = MainWindow()
m.show()
sys.exit(app.exec_())
【问题讨论】:
-
MainWindow.load()方法中的这一行:result = session(Employee).query.all()。变量Employee未在模块中的任何位置定义。您需要在模块中定义Employee模型,或者从某个地方导入它。 -
我会这样做的,谢谢你的帮助
-
@IIja Everila 和 SuperShoot,你能帮忙写代码吗?
标签: python sqlalchemy pyqt