В этом распространенном примере:
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 дней. Спасибо