0
在这个常见的例子:PyQt的 - 使用QSqlRelationalTableModel - model.select()与QSQLITE填充,不psycopg2
from PyQt4 import QtCore, QtGui, QtSql
import psycopg2 as psycopg
import sys
#try:
conn = psycopg.connect("dbname='metalarc1' user='postgres' host='192.168.1.136'
password='admin' port='5433'");
#except:
# print "I am unable to connect to the database"
def initializeModel(model):
# cur.execute("""select * from employee""")
# rows = cur.fetchall()
model.setTable("employee")
model.setEditStrategy(QtSql.QSqlTableModel.OnManualSubmit)
model.setRelation(2, QtSql.QSqlRelation('city', 'id', 'name'))
model.setRelation(3, QtSql.QSqlRelation('country', 'id', 'name'))
model.setHeaderData(0, QtCore.Qt.Horizontal, "ID")
model.setHeaderData(1, QtCore.Qt.Horizontal, "Name")
model.setHeaderData(2, QtCore.Qt.Horizontal, "City")
model.setHeaderData(3, QtCore.Qt.Horizontal, "Country")
model.select()
def createView(title, model):
view = QtGui.QTableView()
view.setModel(model)
view.setItemDelegate(QtSql.QSqlRelationalDelegate(view))
view.setWindowTitle(title)
return view
def createRelationalTables():
query = QtSql.QSqlQuery()
cur.execute("""create table employee(id int primary key not null, name
varchar(20), city int, country int)""")
cur.execute("""insert into employee values(1, 'Espen', 5000, 47)""")
cur.execute("""insert into employee values(2, 'Harald', 80000, 49)""")
cur.execute("""insert into employee values(3, 'Sam', 100, 41)""")
cur.execute("""create table city(id int primary key not null, name varchar(20))""")
cur.execute("""insert into city values(100, 'San Jose')""")
cur.execute("""insert into city values(5000, 'Oslo')""")
cur.execute("""insert into city values(80000, 'Munich')""")
cur.execute("""create table country(id int primary key not null, name varchar(20))""")
cur.execute("""insert into country values(41, 'USA')""")
cur.execute("""insert into country values(47, 'Norway')""")
cur.execute("""insert into country values(49, 'Germany')""")
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
createRelationalTables()
model = QtSql.QSqlRelationalTableModel()
initializeModel(model)
view = createView("Relational Table Model", model)
view.show()
sys.exit(app.exec_())
的表格获得创建精细和填充。但model.select()返回False,视图弹出空白(没有列标题或数据)。
当我运行与QSQLITE数据库相同的代码,它工作正常。我觉得,因为数据是存在的,如果我一定很简单:
cur.execute("""select * from employee""")
rows = cur.fetchall()
rows[0]
(1, 'Espen', 5000, 47)
我总能听到一些帮助 - 这个一直在挣扎了2天。谢谢
非常感谢。我认为我越来越接近但仍然没有数据。几件事情: –
我仍然没有看到QPSQL或ODBC如何在没有驱动程序的情况下工作。我确实有 –
你在哪个平台上?在使用http://riverbankcomputing.co.uk的PyQt二进制安装程序的Windows下,您的 \ Lib \ site-packages \ PyQt4 \ plugins \ sqldrivers文件夹中应该有qsqlpsql4.dll。调用QSqlDatabase.drivers()应该告诉你你有什么可用的。 –