PySide6.QtSql.QSqlTableModel¶
- class QSqlTableModel¶
QSqlTableModel
类为单个数据库表提供了一个可编辑的数据模型。更多…概要¶
方法¶
def
__init__()
def
database()
def
editStrategy()
def
fieldIndex()
def
filter()
def
insertRecord()
def
isDirty()
def
primaryKey()
def
primaryValues()
def
setPrimaryKey()
def
setRecord()
def
tableName()
虚拟方法¶
def
orderByClause()
def
revertRow()
def
select()
def
selectRow()
def
setFilter()
def
setSort()
def
setTable()
插槽¶
def
revertAll()
def
submitAll()
信号¶
def
beforeDelete()
def
beforeInsert()
def
beforeUpdate()
def
primeInsert()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QSqlTableModel
是一个用于从单个表中读取和写入数据库记录的高级接口。它建立在较低级别的QSqlQuery
之上,并可用于向视图类(如 QTableView)提供数据。例如:model = QSqlTableModel() model.setTable("employee") model.setEditStrategy(QSqlTableModel.OnManualSubmit) model.select() model.setHeaderData(0, Qt.Horizontal, tr("Name")) model.setHeaderData(1, Qt.Horizontal, tr("Salary")) view = QTableView() view.setModel(model) view.hideColumn(0) # don't show the ID view.show()
我们设置了SQL表的名称和编辑策略,然后设置了视图中显示的标签。编辑策略决定了用户在视图中所做的更改何时实际应用到数据库中。可能的值为
OnFieldChange
、OnRowChange
和OnManualSubmit
。QSqlTableModel
也可以用于以编程方式访问数据库,而不需要将其绑定到视图:model = QSqlTableModel() model.setTable("employee") model.select() salary = model.record(4).value("salary").toInt()
上面的代码片段从查询
SELECT * from employee
的结果集中提取了记录4的salary
字段。可以使用
setFilter()
设置过滤器,或使用setSort()
修改排序顺序。最后,必须调用select()
以用数据填充模型。tablemodel 示例展示了如何使用
QSqlTableModel
作为 QTableView 的数据源。QSqlTableModel
不直接支持外键。如果你想解析外键,请使用QSqlRelationalTableModel
和QSqlRelationalDelegate
。另请参阅
QSqlRelationalTableModel
QSqlQuery
表格模型示例 缓存的SQL表格- class EditStrategy¶
此枚举类型描述了在编辑数据库中的值时应选择哪种策略。
常量
描述
QSqlTableModel.OnFieldChange
对模型的所有更改将立即应用到数据库。
QSqlTableModel.OnRowChange
当用户选择不同的行时,对行的更改将被应用。
QSqlTableModel.OnManualSubmit
所有更改将缓存在模型中,直到调用
submitAll()
或revertAll()
。注意:为了防止将仅部分初始化的行插入数据库,
OnFieldChange
对于新插入的行将表现得像OnRowChange
。另请参阅
- __init__([parent=None[, db=QSqlDatabase()]])¶
- Parameters:
parent –
QObject
db –
QSqlDatabase
创建一个空的
QSqlTableModel
,并将父对象设置为parent
,数据库连接设置为db
。如果db
无效,将使用默认的数据库连接。默认的编辑策略是
OnRowChange
。- beforeDelete(row)¶
- Parameters:
行 – 整数
此信号由
deleteRowFromTable()
在row
从当前活动的数据库表中删除之前发出。- beforeInsert(record)¶
- Parameters:
记录 –
QSqlRecord
此信号由
insertRowIntoTable()
在将新行插入当前活动数据库表之前发出。即将插入的值存储在record
中,并且可以在插入之前进行修改。- beforeUpdate(row, record)¶
- Parameters:
row – int
record –
QSqlRecord
此信号由
updateRowInTable()
在row
使用record
中的值更新当前活动数据库表之前发出。请注意,只有标记为生成的值才会被更新。生成标志可以通过
setGenerated()
设置,并通过isGenerated()
检查。另请参阅
- database()¶
- Return type:
返回模型的数据库连接。
- deleteRowFromTable(row)¶
- Parameters:
行 – 整数
- Return type:
布尔
从当前活动的数据库表中删除给定的
row
。这是一个直接在数据库上操作的低级方法,不应直接调用。使用removeRow()或
removeRows()
来删除值。模型将根据其编辑策略决定何时修改数据库。如果行被删除,则返回
true
;否则返回false
。另请参阅
removeRows()
- editStrategy()¶
- Return type:
返回当前的编辑策略。
另请参阅
- fieldIndex(fieldName)¶
- Parameters:
fieldName – str
- Return type:
整数
返回字段
fieldName
的索引,如果模型中不存在相应的字段,则返回 -1。- filter()¶
- Return type:
字符串
返回当前设置的过滤器。
另请参阅
- insertRecord(row, record)¶
- Parameters:
row – int
record –
QSqlRecord
- Return type:
布尔
在位置
row
插入record
。如果row
为负数,记录将被追加到末尾。内部调用insertRows()
和setRecord()
。如果记录可以插入,则返回
true
,否则返回 false。更改会立即提交给
OnFieldChange
和OnRowChange
。失败不会在模型中留下新行。另请参阅
insertRows()
removeRows()
setRecord()
- insertRowIntoTable(values)¶
- Parameters:
值 –
QSqlRecord
- Return type:
布尔
将值
values
插入到当前活动的数据库表中。这是一个直接在数据库上操作的低级方法,不应直接调用。使用insertRow()和
setData()
来插入值。模型将根据其编辑策略决定何时修改数据库。如果值可以插入,则返回
true
,否则返回 false。错误信息可以通过lastError()
获取。另请参阅
lastError()
insertRows()
- isDirty()¶
- Return type:
布尔
这是一个重载函数。
如果模型包含尚未提交到数据库的修改值,则返回
true
,否则返回 false。- isDirty(index)
- Parameters:
索引 –
QModelIndex
- Return type:
布尔
如果索引
index
处的值是脏的,则返回true
,否则返回 false。脏值是指在模型中修改但尚未写入数据库的值。如果
index
无效或指向不存在的行,则返回 false。- orderByClause()¶
- Return type:
字符串
返回基于当前设置的排序顺序的SQL
ORDER BY
子句。返回当前表的主键,如果表未设置或没有主键,则返回一个空的
QSqlIndex
。- primaryValues(row)¶
- Parameters:
行 – 整数
- Return type:
返回一个记录,该记录包含主键中表示的字段,这些字段设置为
row
处的值。如果未定义主键,则返回的记录将包含所有字段。另请参阅
- primeInsert(row, record)¶
- Parameters:
row – int
record –
QSqlRecord
当在当前活动数据库表的给定
row
中启动插入时,此信号由insertRows()
发出。record
参数可以被写入(因为它是一个引用),例如用默认值填充某些字段并设置字段的生成标志。在处理此信号时,不要尝试通过其他方式(如setData()
或setRecord()
)编辑记录。- revertAll()¶
撤销所有待处理的更改。
另请参阅
revert()
revertRow()
submitAll()
- revertRow(row)¶
- Parameters:
行 – 整数
恢复指定
row
的所有更改。另请参阅
revert()
revertAll()
submit()
submitAll()
- select()¶
- Return type:
布尔
使用指定的过滤和排序条件,从通过
setTable()
设置的表中填充数据到模型中,如果成功则返回true
;否则返回false
。- selectRow(row)¶
- Parameters:
行 – 整数
- Return type:
布尔
使用数据库表中与主键值匹配的行中的值刷新模型中的
row
。如果没有主键,所有列值必须匹配。如果未找到匹配的行,模型将显示一个空行。如果成功,返回
true
;否则返回false
。另请参阅
- selectStatement()¶
- Return type:
字符串
返回用于内部填充模型的SQL
SELECT
语句。该语句包括过滤器和ORDER BY
子句。另请参阅
- setEditStrategy(strategy)¶
- Parameters:
策略 –
EditStrategy
设置数据库中的值编辑策略为
strategy
。这将撤销任何待定的更改。
- setFilter(filter)¶
- Parameters:
filter – 字符串
将当前过滤器设置为
filter
。过滤器是一个SQL
WHERE
子句,但不包含关键字WHERE
(例如,name='Josephine')
。如果模型已经填充了来自数据库的数据,模型将使用新的过滤器重新选择它。否则,过滤器将在下次调用
select()
时应用。受保护的方法,允许子类将主键设置为
key
。通常情况下,每当您调用
setTable()
时,主索引会自动设置。- setRecord(row, record)¶
- Parameters:
row – int
record –
QSqlRecord
- Return type:
布尔
将
values
应用于模型中的row
。源字段和目标字段通过字段名称映射,而不是通过记录中的位置。请注意,
values
中生成的标志会被保留,以确定在将更改提交到数据库时是否使用了相应的字段。默认情况下,QSqlRecord
中的所有字段都设置为true
。您必须使用setGenerated
(false) 将values
中的任何值的标志设置为false
,以便将更改保存回数据库。对于编辑策略
OnFieldChange
和OnRowChange
,只有在没有其他行有缓存更改的情况下,一行才能接收更改。更改会立即提交。提交的更改在失败时不会回滚。如果所有值都可以设置,则返回
true
;否则返回 false。另请参阅
record()
editStrategy()
将
column
的排序顺序设置为order
。这不会影响当前数据,要使用新的排序顺序刷新数据,请调用select()
。另请参阅
sort()
select()
orderByClause()
- setTable(tableName)¶
- Parameters:
tableName – str
设置模型操作的数据库表为
tableName
。不会从表中选择数据,而是获取其字段信息。要用表格的数据填充模型,请调用
select()
。错误信息可以通过
lastError()
获取。- submitAll()¶
- Return type:
布尔
提交所有挂起的更改并在成功时返回
true
。在错误时返回false
,可以通过lastError()
获取详细的错误信息。在
OnManualSubmit
中,成功时模型将被重新填充。任何展示它的视图将失去它们的选择。注意:在
OnManualSubmit
模式下,当submitAll()失败时,已提交的更改不会从缓存中清除。这允许事务回滚并重新提交而不会丢失数据。另请参阅
- tableName()¶
- Return type:
字符串
返回当前选择的表的名称。
- updateRowInTable(row, values)¶
- Parameters:
row – int
values –
QSqlRecord
- Return type:
布尔
使用指定的
values
更新当前活动数据库表中的给定row
。如果成功,返回true
;否则返回false
。这是一个直接在数据库上操作的低级方法,不应直接调用。使用
setData()
来更新值。模型将根据其编辑策略决定何时修改数据库。请注意,只有设置了生成标志的值才会被更新。生成标志可以通过
setGenerated()
设置,并通过isGenerated()
进行测试。另请参阅
isGenerated()
setData()