PySide6.QtSql.QSqlRelationalTableModel¶
- class QSqlRelationalTableModel¶
QSqlRelationalTableModel
类为单个数据库表提供了一个可编辑的数据模型,并支持外键。更多…概要¶
方法¶
def
__init__()
def
relation()
def
setJoinMode()
虚拟方法¶
def
relationModel()
def
setRelation()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QSqlRelationalTableModel
的行为类似于QSqlTableModel
,但允许将列设置为其他数据库表的外键。左侧的截图显示了在QTableView中的一个普通
QSqlTableModel
。外键(city
和country
)没有解析为人类可读的值。右侧的截图显示了一个QSqlRelationalTableModel
,外键被解析为人类可读的文本字符串。以下代码片段展示了如何设置
QSqlRelationalTableModel
:model.setTable("employee") model.setRelation(2, QSqlRelation("city", "id", "name")) model.setRelation(3, QSqlRelation("country", "id", "name"))
setRelation()
函数调用用于在两个表之间建立关系。第一次调用指定了表employee
中的第2列是与表city
的id
字段映射的外键,并且视图应向用户展示city
表的name
字段。第二次调用对第3列执行了类似的操作。如果您使用读写模式的
QSqlRelationalTableModel
,您可能希望在视图上使用QSqlRelationalDelegate
。与默认的委托不同,QSqlRelationalDelegate
为外键字段提供了一个组合框,这些字段指向其他表。要使用这个类,只需在视图上调用QAbstractItemView::setItemDelegate(),并传入QSqlRelationalDelegate
的实例:std.unique_ptr<QTableView> view{QTableView()} view.setModel(model) view.setItemDelegate(QSqlRelationalDelegate(view.get()))
relationaltablemodel 示例展示了如何使用
QSqlRelationalTableModel
与QSqlRelationalDelegate
结合,以提供支持外键的表格。备注:
表必须声明一个主键。
表的主键不能包含对另一个表的关系。
如果关系表中包含引用表中不存在的行的键,则包含无效键的行将不会通过模型暴露。用户或数据库负责保持引用完整性。
如果一个关系的显示列名也被用作关系表中的列名,或者如果它被用作多个关系中的显示列名,它将被别名化。别名是关系的表名、显示列名和一个由下划线连接的唯一ID(例如tablename_columnname_id)。
fieldName()
将返回别名化的列名。当检测到重复时,所有重复的显示列名都会被别名化,但主表中的列名不会被别名化。别名化不会影响QSqlRelation
,因此displayColumn()
将返回原始的显示列名。参考表名被别名化。别名是单词“relTblAl”和由下划线连接的相关列索引(例如relTblAl_2)。该别名可用于过滤表(例如,setFilter(“relTblAl_2=’Oslo’ OR relTblAl_3=’USA’”))。
当使用
setData()
时,角色应始终为 Qt::EditRole,而当使用data()
时,角色应始终为 Qt::DisplayRole。
另请参阅
QSqlRelation
QSqlRelationalDelegate
关系表模型示例- class JoinMode¶
常量
描述
QSqlRelationalTableModel.InnerJoin
内连接模式,当两个表中至少有一个匹配时返回行。
QSqlRelationalTableModel.LeftJoin
左连接模式,返回左表(table_name1)中的所有行,即使右表(table_name2)中没有匹配项。
另请参阅
- __init__([parent=None[, db=QSqlDatabase()]])¶
- Parameters:
parent –
QObject
db –
QSqlDatabase
创建一个空的
QSqlRelationalTableModel
,并将父对象设置为parent
,数据库连接设置为db
。如果db
无效,将使用默认的数据库连接。- relation(column)¶
- Parameters:
列 – int
- Return type:
返回列
column
的关系,如果未设置关系,则返回无效关系。另请参阅
- relationModel(column)¶
- Parameters:
列 – int
- Return type:
返回一个
QSqlTableModel
对象,用于访问column
作为外键的表,如果给定的column
没有关系,则返回None
。返回的对象由
QSqlRelationalTableModel
拥有。另请参阅
设置SQL
joinMode
以显示或隐藏具有NULL外键的行。在InnerJoin
模式(默认)下,这些行将不会显示:如果您想显示它们,请使用LeftJoin
模式。另请参阅
- setRelation(column, relation)¶
- Parameters:
column – 整数
relation –
QSqlRelation
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
让指定的
column
成为由relation
指定的外键索引。示例:
model.setTable("employee") model.setRelation(2, QSqlRelation("city", "id", "name"))
setRelation() 调用指定表
employee
中的第2列是与表city
的id
字段映射的外键,并且视图应向用户展示city
的name
字段。注意:表的主键可能不包含与另一个表的关系。
另请参阅