QSqlTableModel Class Reference
[QtSql module]
在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。More…
Types
enum EditStrategy { OnFieldChange, OnRowChange, OnManualSubmit }
Methods
__init__ (self, QObject parent = None, QSqlDatabase db = QSqlDatabase())
clear (self)
QVariant data (self, QModelIndex index, int role = Qt.DisplayRole)
QSqlDatabase database (self)
bool deleteRowFromTable (self, int row)
EditStrategy editStrategy (self)
int fieldIndex (self, QString fieldName)
QString filter (self)
Qt.ItemFlags flags (self, QModelIndex index)
QVariant headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)
QModelIndex indexInQuery (self, QModelIndex item)
bool insertRecord (self, int row, QSqlRecord record)
bool insertRowIntoTable (self, QSqlRecord values)
bool insertRows (self, int row, int count, QModelIndex parent = QModelIndex())
bool isDirty (self, QModelIndex index)
QString orderByClause (self)
QSqlIndex primaryKey (self)
bool removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())
bool removeRows (self, int row, int count, QModelIndex parent = QModelIndex())
revert (self)
revertAll (self)
revertRow (self, int row)
int rowCount (self, QModelIndex parent = QModelIndex())
bool select (self)
QString selectStatement (self)
bool setData (self, QModelIndex index, QVariant value, int role = Qt.EditRole)
setEditStrategy (self, EditStrategy strategy)
setFilter (self, QString filter)
setPrimaryKey (self, QSqlIndex key)
setQuery (self, QSqlQuery query)
bool setRecord (self, int row, QSqlRecord record)
setSort (self, int column, Qt.SortOrder order)
setTable (self, QString tableName)
sort (self, int column, Qt.SortOrder order)
bool submit (self)
bool submitAll (self)
QString tableName (self)
bool updateRowInTable (self, int row, QSqlRecord values)
Qt Signals
void beforeDelete (int)
void beforeInsert (QSqlRecord&)
void beforeUpdate (int,QSqlRecord&)
void primeInsert (int,QSqlRecord&)
Detailed Description
在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。
QSqlTableModel的功能是从一个单一的表中读取和写入数据库记录的高层次的接口。它是建立在较低级别的顶QSqlQuery并且可以用来提供数据可以看到类如QTableView。例如:
QSqlTableModel *model = new QSqlTableModel(parentObject, database);
model->setTable("employee");
model->setEditStrategy(QSqlTableModel.OnManualSubmit);
model->select();
model->setHeaderData(0, [Qt](qt.html).Horizontal, tr("Name"));
model->setHeaderData(1, [Qt](qt.html).Horizontal, tr("Salary"));
[QTableView]($docs-qtableview.html) *view = new [QTableView]($docs-qtableview.html);
view->setModel(model);
view->hideColumn(0); // don't show the ID
view->show();
我们设置SQL表的名称和编辑策略,然后我们设置视图中的标题显示的标籤。编辑策略决定时由用户在视图中所做的更改实际应用到数据库。可能的值是OnFieldChange,OnRowChange和OnManualSubmit。
QSqlTableModel的功能也可以用来访问数据库编程,不绑定到一个视图:
[QSqlQueryModel]($docs-qsqlquerymodel.html) model;
model.setQuery("SELECT * FROM employee");
int salary = model.record(4).value("salary").toInt();
上面的代码片段中提取salary
从查询的结果集记录4场SELECT * from employee
。
它可以用来设置过滤器setFilter( ),或使用修改排序顺序setSort( ) 。最后,你必须调用select( )来填充模型数据。
该sql/tablemodel示例说明了如何使用与QSqlTableModel作为数据源的QTableView。
QSqlTableModel为外键没有直接的支持。使用QSqlRelationalTableModel和QSqlRelationalDelegate如果你想解决的外键。
Type Documentation
QSqlTableModel.EditStrategy
该枚举类型描述编辑数据库中的值时,选择哪个策略。
Constant | Value | Description |
---|---|---|
QSqlTableModel.OnFieldChange |
0 |
所有更改模型将被立即应用到数据库。 |
QSqlTableModel.OnRowChange |
1 |
当用户选择不同的行改变为一行将被应用。 |
QSqlTableModel.OnManualSubmit |
2 |
所有更改都将被缓存在模型中,直至submitAll()或revertAll()被调用。 |
注意:为了防止插入只有部分初始化行插入到数据库中,OnFieldChange
会像OnRowChange
对于新插入的行。
See also setEditStrategy( ) 。
Method Documentation
QSqlTableModel.__init__ (self, QObject parent = None, QSqlDatabase db = QSqlDatabase())
该parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。
创建一个空的QSqlTableModel并设置父parent与数据库连接db。如果db是无效的,默认的数据库连接将被使用。
默认的编辑策略OnRowChange。
QSqlTableModel.clear (self)
从重新实现QSqlQueryModel.clear( ) 。
QVariant QSqlTableModel.data (self, QModelIndex index, int role = Qt.DisplayRole)
从重新实现QAbstractItemModel.data( ) 。
See also setData( ) 。
QSqlDatabase QSqlTableModel.database (self)
返回一个指向所使用的QSqlDatabase或者0,如果没有数据库设置。
bool QSqlTableModel.deleteRowFromTable (self, int row)
删除给定的row从当前活动的数据库表。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用removeRow()或removeRows()来删除值。该模型将取决于它的编辑策略,决定何时修改数据库。
返回True如果该行被删除,否则返回False 。
See also removeRow()和removeRows( ) 。
EditStrategy QSqlTableModel.editStrategy (self)
[
返回当前的编辑策略。
]($docs-qsqltablemodel.html#EditStrategy-enum)
See also setEditStrategy( ) 。
int QSqlTableModel.fieldIndex (self, QString fieldName)
返回字段的索引fieldName,或-1,如果没有相应的字段存在于模型中。
QString QSqlTableModel.filter (self)
返回当前设置的过滤器。
See also setFilter()和select( ) 。
Qt.ItemFlags QSqlTableModel.flags (self, QModelIndex index)
从重新实现QAbstractItemModel.flags( ) 。
QVariant QSqlTableModel.headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)
从重新实现QAbstractItemModel.headerData( ) 。
QModelIndex QSqlTableModel.indexInQuery (self, QModelIndex item)
[
返回在给定的数据库中的结果集的值的索引item在模型中。
返回值是相同的item如果已经插入任何行或列,删除或移动了。
返回一个无效的模型索引,如果item超出范围或item不指向结果集中的值。
]($docs-qmodelindex.html)
See also QSqlQueryModel.indexInQuery( ) 。
bool QSqlTableModel.insertRecord (self, int row, QSqlRecord record)
插入record后row。如果row为负,该记录将被追加到末尾。电话insertRows()和setRecord(内部) 。
返回True如果可以插入该行,否则为False。
See also insertRows()和removeRows( ) 。
bool QSqlTableModel.insertRowIntoTable (self, QSqlRecord values)
插入的值values到当前活动的数据库表。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用insertRow()和setData()来插入值。该模型将取决于它的编辑策略,决定何时修改数据库。
返回True如果该值可以被插入,否则为False。错误信息可以检索与lastError( ) 。
See also lastError( )insertRow()和insertRows( ) 。
bool QSqlTableModel.insertRows (self, int row, int count, QModelIndex parent = QModelIndex())
从重新实现QAbstractItemModel.insertRows( ) 。
Inserts count在位置空行row。需要注意的是parent必须是无效的,因为这种模式不支持父子关系。
仅1行的时间可以在使用被插入的OnFieldChange or OnRowChange更新策略。
该primeInsert()信号将被发射的每一个新行。连接到它,如果你想用默认值初始化的新行。
返回False如果参数超出范围,否则返回True 。
See also primeInsert()和insertRecord( ) 。
bool QSqlTableModel.isDirty (self, QModelIndex index)
返回True如果该索引处的值index脏,否则为False 。脏值是进行了修改,在模型中,但尚未写入到数据库中的值。
If index无效或指向一个不存在的列,则返回False。
QString QSqlTableModel.orderByClause (self)
返回一个SQLORDER BY
基于条当前设置的排序顺序。
See also setSort()和selectStatement( ) 。
QSqlIndex QSqlTableModel.primaryKey (self)
返回主键为当前表,或空QSqlIndex如果表没有设置或没有主键。
See also setTable( )setPrimaryKey()和QSqlDatabase.primaryIndex( ) 。
bool QSqlTableModel.removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())
从重新实现QAbstractItemModel.removeColumns( ) 。
移除count从列parent模型,从索引column。
如果返回的列被成功删除,否则返回False 。
See also removeRows( ) 。
bool QSqlTableModel.removeRows (self, int row, int count, QModelIndex parent = QModelIndex())
从重新实现QAbstractItemModel.removeRows( ) 。
移除count行开始row。由于此型号不支持的层次结构,parent必须是一个无效的模型索引。
放出beforeDelete(一排之前)信号被删除。当编辑策略OnManualSubmit信号发射被延迟,直到submitAll()被调用。
返回True如果所有行会被移除,否则返回False 。详细的错误信息可以使用检索lastError( ) 。
See also removeColumns()和insertRows( ) 。
QSqlTableModel.revert (self)
这种方法也是一个Qt槽与C + +的签名void revert()
。
从重新实现QAbstractItemModel.revert( ) 。
这个重新实现槽是由所谓的项目代表,当用户取消了编辑当前行。
恢复的变化,如果模型的策略设置为OnRowChange。什么都不做的其他的编辑策略。
使用revertAll()恢复为所有挂起的更改OnManualSubmit策略或revertRow()来恢复一个特定的行。
See also submit( )submitAll( )revertRow()和revertAll( ) 。
QSqlTableModel.revertAll (self)
这种方法也是一个Qt槽与C + +的签名void revertAll()
。
恢复所有挂起的更改。
See also revert( )revertRow()和submitAll( ) 。
QSqlTableModel.revertRow (self, int row)
恢复为指定的所有变化row。
See also revert( )revertAll( )submit()和submitAll( ) 。
int QSqlTableModel.rowCount (self, QModelIndex parent = QModelIndex())
从重新实现QAbstractItemModel.rowCount( ) 。
bool QSqlTableModel.select (self)
填充模型从表中的数据是通过设置setTable( ) ,使用指定的过滤和排序条件,如果成功返回True,否则返回False 。
Note:调用select ( )将返回任何未提交的更改并删除任何插入的列。
See also setTable( )setFilter()和selectStatement( ) 。
QString QSqlTableModel.selectStatement (self)
返回SQLSELECT
语句内部使用的填充模式。该表包括过滤器和ORDER BY
子句。
See also filter()和orderByClause( ) 。
bool QSqlTableModel.setData (self, QModelIndex index, QVariant value, int role = Qt.EditRole)
从重新实现QAbstractItemModel.setData( ) 。
设置数据的项index为角色role至value。取决于编辑策略,则该值可能被应用到数据库一次或缓存在模型中。
返回True如果该值可以设置或虚假的错误,例如,如果index是出界。
See also editStrategy( )data( )submit( )submitAll()和revertRow( ) 。
QSqlTableModel.setEditStrategy (self, EditStrategy strategy)
设置的策略对数据库中的值编辑strategy。
这将恢复所有挂起的更改。
See also editStrategy()和revertAll( ) 。
QSqlTableModel.setFilter (self, QString filter)
设置当前过滤器filter。
该滤波器是一个SQLWHERE
没有关键字条款WHERE
(例如,name='Josephine')
。
如果已填充模型与数据库中的数据,该机型配备了新的过滤器重新选择它。否则,过滤器会在下一次应用select()被调用。
See also filter( )select( )selectStatement()和orderByClause( ) 。
QSqlTableModel.setPrimaryKey (self, QSqlIndex key)
受保护的方法,让子类来设置主键key。
通常情况下,只要您拨打的主索引会自动设置setTable( ) 。
See also primaryKey()和QSqlDatabase.primaryIndex( ) 。
QSqlTableModel.setQuery (self, QSqlQuery query)
这个函数简单地调用QSqlQueryModel.setQuery (query) 。在你通常应该不叫QSqlTableModel。相反,使用setTable( )setSort( )setFilter( )等,来设置该查询。
See also selectStatement( ) 。
bool QSqlTableModel.setRecord (self, int row, QSqlRecord record)
在指定的设定值row到的值record。返回True如果所有的值可以被置位,否则返回False 。
See also record( ) 。
QSqlTableModel.setSort (self, int column, Qt.SortOrder order)
设置排序顺序column至order。这不影响当前数据,使用新的排序顺序,调用刷新数据select( ) 。
See also sort( )select()和orderByClause( ) 。
QSqlTableModel.setTable (self, QString tableName)
对这样的模式操作到数据库表tableName。不从表中选择数据,但其获取字段信息。
要填充模型与表的数据,调用select( ) 。
错误信息可以检索与lastError( ) 。
See also select( )setFilter()和lastError( ) 。
QSqlTableModel.sort (self, int column, Qt.SortOrder order)
从重新实现QAbstractItemModel.sort( ) 。
通过对数据进行排序column与排序顺序order。这将立即选择数据,使用setSort( )来设置排序顺序不填充模型数据。
See also setSort( )select()和orderByClause( ) 。
bool QSqlTableModel.submit (self)
这种方法也是一个Qt槽与C + +的签名bool submit()
。
从重新实现QAbstractItemModel.submit( ) 。
这个重新实现槽是由所谓的项目代表,当用户停止编辑当前行。
提交当前编辑的行,如果该模型的策略设置为OnRowChange or OnFieldChange。什么都不做的OnManualSubmit战略。
使用submitAll( )提交的所有挂起的更改OnManualSubmit战略。
成功时返回TRUE ,否则返回False 。使用lastError( )来查询详细的错误信息。
成功模型将被重新填充。任何提出它的意见将失去他们的选择。
See also revert( )revertRow( )submitAll( )revertAll()和lastError( ) 。
bool QSqlTableModel.submitAll (self)
这种方法也是一个Qt槽与C + +的签名bool submitAll()
。
提交所有挂起的更改,并成功返回True 。返回False的错误,详细的错误信息,可以得到lastError( ) 。
成功模型将被重新填充。任何提出它的意见将失去他们的选择。
注意:在OnManualSubmit模式,已经提交的变更将不会从什么时候submitAll ()失败的缓存中清除。这允许事务被回滚,并再次重新提交,而不会丢失数据。
See also revertAll()和lastError( ) 。
QString QSqlTableModel.tableName (self)
返回当前选定的表的名称。
bool QSqlTableModel.updateRowInTable (self, int row, QSqlRecord values)
更新给定的row在与指定当前活动的数据库表values。成功返回True ,否则返回False 。
这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用setData()来更新值。该模型将取决于它的编辑策略,决定何时修改数据库。
请注意,只有具有所生成的标志设定值被更新。所生成的标志可与设置QSqlRecord.setGenerated( )中,用测试QSqlRecord.isGenerated( ) 。
See also QSqlRecord.isGenerated()和setData( ) 。
Qt Signal Documentation
void beforeDelete (int)
这是该信号的默认超载。
这个信号是由发射deleteRowFromTable( )之前,row从当前活动的数据库表中删除。
void beforeInsert (QSqlRecord&)
这是该信号的默认超载。
这个信号是由发射insertRowIntoTable( )一个新行插入到当前活动的数据库表之前。这是将要被插入的值被存储在record并且可以进行修改将被插入之前,他们。
void beforeUpdate (int,QSqlRecord&)
这是该信号的默认超载。
这个信号是由发射updateRowInTable( )之前,row在当前活动的数据库表从值更新record。
请注意,只有被标记为生成的值将被更新。所生成的标记可与设置QSqlRecord.setGenerated() ,并检查与QSqlRecord.isGenerated( ) 。
See also QSqlRecord.isGenerated( ) 。
void primeInsert (int,QSqlRecord&)
这是该信号的默认超载。
这个信号是由发射insertRows( )中,当在给定的开始插入row当前活动的数据库表。该record参数可以被写入(因为它是一个参考),例如,以使用默认值的字段。