1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QTableView,QMessageBox
from PyQt5.QtSql import QSqlTableModel,QSqlDatabase, QSqlQuery,QSqlRelationalTableModel,QSqlRelation,QSqlRelationalDelegate
def createConnection():
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName(':memory:')
db.open()
return db
# create tables -----------------------------------
def createRelationalTables(QSqlDatabase):
query = QSqlQuery(QSqlDatabase)
query.exec_("create table employee(id int, name varchar(20), city int, country int)")
query.exec_("insert into employee values(1, 'Espen', 5000, 47)")
query.exec_("insert into employee values(2, 'Harald', 80000, 49)")
query.exec_("insert into employee values(3, 'Sam', 100, 41)")
query.exec_("create table city(id int, name varchar(20))")
query.exec_("insert into city values(100, 'San Jose')")
query.exec_("insert into city values(5000, 'Oslo')")
query.exec_("insert into city values(80000, 'Munich')")
query.exec_("create table country(id int, name varchar(20))")
query.exec_("insert into country values(41, 'USA')")
query.exec_("insert into country values(47, 'Norway')")
query.exec_("insert into country values(49, 'Germany')")
def initializeRelModel(model):
model.setTable('employee')
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.setRelation(2, QSqlRelation('city', 'id', 'name'))
model.setRelation(3, QSqlRelation('country', 'id', 'name'))
model.setHeaderData(0, Qt.Horizontal, "ID")
model.setHeaderData(1, Qt.Horizontal, "Name")
model.setHeaderData(2, Qt.Horizontal, "City")
model.setHeaderData(3, Qt.Horizontal, "Country")
model.select()
def initializeModeCity(model):
model.setTable('city')
model.setEditStrategy(QSqlTableModel.OnFieldChange)
model.setHeaderData(0, Qt.Horizontal, "ID")
model.setHeaderData(1, Qt.Horizontal, "Name")
model.select()
def createRelView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
view.setItemDelegate(QSqlRelationalDelegate(view))
return view
def createView(title, model):
view = QTableView()
view.setModel(model)
view.setWindowTitle(title)
return view
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
db=createConnection()
createRelationalTables(db)
modelRel=QSqlRelationalTableModel()
model = QSqlTableModel()
initializeRelModel(modelRel)
initializeModeCity(model)
view1 = createRelView("Table Model (View employee)", modelRel)
view2 = createView("Table Model (View city)", model)
view1.show()
view2.move(view1.x() + view1.width() + 20, view1.y())
view2.show()
sys.exit(app.exec_()) |
Partager