QSqlTableModel Class Reference

[QtSql module]

在与QSqlTableModel类提供了一个单一的数据库表中的可编辑的数据模型。More…

继承QSqlQueryModel

通过继承QSqlRelationalTableModel

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。例如:

  1. QSqlTableModel *model = new QSqlTableModel(parentObject, database);
  2. model->setTable("employee");
  3. model->setEditStrategy(QSqlTableModel.OnManualSubmit);
  4. model->select();
  5. model->setHeaderData(0, [Qt](qt.html).Horizontal, tr("Name"));
  6. model->setHeaderData(1, [Qt](qt.html).Horizontal, tr("Salary"));
  7. [QTableView]($docs-qtableview.html) *view = new [QTableView]($docs-qtableview.html);
  8. view->setModel(model);
  9. view->hideColumn(0); // don't show the ID
  10. view->show();

我们设置SQL表的名称和编辑策略,然后我们设置视图中的标题显示的标籤。编辑策略决定时由用户在视图中所做的更改实际应用到数据库。可能的值是OnFieldChangeOnRowChangeOnManualSubmit

QSqlTableModel的功能也可以用来访问数据库编程,不绑定到一个视图:

  1. [QSqlQueryModel]($docs-qsqlquerymodel.html) model;
  2. model.setQuery("SELECT * FROM employee");
  3. int salary = model.record(4).value("salary").toInt();

上面的代码片段中提取salary从查询的结果集记录4场SELECT * from employee

它可以用来设置过滤器setFilter( ),或使用修改排序顺序setSort( ) 。最后,你必须调用select( )来填充模型数据。

sql/tablemodel示例说明了如何使用与QSqlTableModel作为数据源的QTableView

QSqlTableModel为外键没有直接的支持。使用QSqlRelationalTableModelQSqlRelationalDelegate如果你想解决的外键。


Type Documentation

  1. QSqlTableModel.EditStrategy

该枚举类型描述编辑数据库中的值时,选择哪个策略。

Constant Value Description
QSqlTableModel.OnFieldChange 0 所有更改模型将被立即应用到数据库。
QSqlTableModel.OnRowChange 1 当用户选择不同的行改变为一行将被应用。
QSqlTableModel.OnManualSubmit 2 所有更改都将被缓存在模型中,直至submitAll()或revertAll()被调用。

注意:为了防止插入只有部分初始化行插入到数据库中,OnFieldChange会像OnRowChange对于新插入的行。

See also setEditStrategy( ) 。


Method Documentation

  1. QSqlTableModel.__init__ (self, QObject parent = None, QSqlDatabase db = QSqlDatabase())

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

创建一个空的QSqlTableModel并设置父parent与数据库连接db。如果db是无效的,默认的数据库连接将被使用。

默认的编辑策略OnRowChange

  1. QSqlTableModel.clear (self)

从重新实现QSqlQueryModel.clear( ) 。

  1. QVariant QSqlTableModel.data (self, QModelIndex index, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.data( ) 。

See also setData( ) 。

  1. QSqlDatabase QSqlTableModel.database (self)

返回一个指向所使用的QSqlDatabase或者0,如果没有数据库设置。

  1. bool QSqlTableModel.deleteRowFromTable (self, int row)

删除给定的row从当前活动的数据库表。

这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用removeRow()或removeRows()来删除值。该模型将取决于它的编辑策略,决定何时修改数据库。

返回True如果该行被删除,否则返回False 。

See also removeRow()和removeRows( ) 。

  1. EditStrategy QSqlTableModel.editStrategy (self)

[

返回当前的编辑策略。

]($docs-qsqltablemodel.html#EditStrategy-enum)

See also setEditStrategy( ) 。

  1. int QSqlTableModel.fieldIndex (self, QString fieldName)

返回字段的索引fieldName,或-1,如果没有相应的字段存在于模型中。

  1. QString QSqlTableModel.filter (self)

返回当前设置的过滤器。

See also setFilter()和select( ) 。

  1. Qt.ItemFlags QSqlTableModel.flags (self, QModelIndex index)

从重新实现QAbstractItemModel.flags( ) 。

  1. QVariant QSqlTableModel.headerData (self, int section, Qt.Orientation orientation, int role = Qt.DisplayRole)

从重新实现QAbstractItemModel.headerData( ) 。

  1. QModelIndex QSqlTableModel.indexInQuery (self, QModelIndex item)

[

返回在给定的数据库中的结果集的值的索引item在模型中。

返回值是相同的item如果已经插入任何行或列,删除或移动了。

返回一个无效的模型索引,如果item超出范围或item不指向结果集中的值。

]($docs-qmodelindex.html)

See also QSqlQueryModel.indexInQuery( ) 。

  1. bool QSqlTableModel.insertRecord (self, int row, QSqlRecord record)

插入recordrow。如果row为负,该记录将被追加到末尾。电话insertRows()和setRecord(内部) 。

返回True如果可以插入该行,否则为False。

See also insertRows()和removeRows( ) 。

  1. bool QSqlTableModel.insertRowIntoTable (self, QSqlRecord values)

插入的值values到当前活动的数据库表。

这是一种直接操作的数据库上,不应该被直接调用低级别的方法。使用insertRow()和setData()来插入值。该模型将取决于它的编辑策略,决定何时修改数据库。

返回True如果该值可以被插入,否则为False。错误信息可以检索与lastError( ) 。

See also lastError( )insertRow()和insertRows( ) 。

  1. 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( ) 。

  1. bool QSqlTableModel.isDirty (self, QModelIndex index)

返回True如果该索引处的值index脏,否则为False 。脏值是进行了修改,在模型中,但尚未写入到数据库中的值。

If index无效或指向一个不存在的列,则返回False。

  1. QString QSqlTableModel.orderByClause (self)

返回一个SQLORDER BY基于条当前设置的排序顺序。

See also setSort()和selectStatement( ) 。

  1. QSqlIndex QSqlTableModel.primaryKey (self)

返回主键为当前表,或空QSqlIndex如果表没有设置或没有主键。

See also setTable( )setPrimaryKey()和QSqlDatabase.primaryIndex( ) 。

  1. bool QSqlTableModel.removeColumns (self, int column, int count, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.removeColumns( ) 。

移除count从列parent模型,从索引column

如果返回的列被成功删除,否则返回False 。

See also removeRows( ) 。

  1. 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( ) 。

  1. QSqlTableModel.revert (self)

这种方法也是一个Qt槽与C + +的签名void revert()

从重新实现QAbstractItemModel.revert( ) 。

这个重新实现槽是由所谓的项目代表,当用户取消了编辑当前行。

恢复的变化,如果模型的策略设置为OnRowChange。什么都不做的其他的编辑策略。

使用revertAll()恢复为所有挂起的更改OnManualSubmit策略或revertRow()来恢复一个特定的行。

See also submit( )submitAll( )revertRow()和revertAll( ) 。

  1. QSqlTableModel.revertAll (self)

这种方法也是一个Qt槽与C + +的签名void revertAll()

恢复所有挂起的更改。

See also revert( )revertRow()和submitAll( ) 。

  1. QSqlTableModel.revertRow (self, int row)

恢复为指定的所有变化row

See also revert( )revertAll( )submit()和submitAll( ) 。

  1. int QSqlTableModel.rowCount (self, QModelIndex parent = QModelIndex())

从重新实现QAbstractItemModel.rowCount( ) 。

  1. bool QSqlTableModel.select (self)

填充模型从表中的数据是通过设置setTable( ) ,使用指定的过滤和排序条件,如果成功返回True,否则返回False 。

Note:调用select ( )将返回任何未提交的更改并删除任何插入的列。

See also setTable( )setFilter()和selectStatement( ) 。

  1. QString QSqlTableModel.selectStatement (self)

返回SQLSELECT语句内部使用的填充模式。该表包括过滤器和ORDER BY子句。

See also filter()和orderByClause( ) 。

  1. bool QSqlTableModel.setData (self, QModelIndex index, QVariant value, int role = Qt.EditRole)

从重新实现QAbstractItemModel.setData( ) 。

设置数据的项index为角色rolevalue。取决于编辑策略,则该值可能被应用到数据库一次或缓存在模型中。

返回True如果该值可以设置或虚假的错误,例如,如果index是出界。

See also editStrategy( )data( )submit( )submitAll()和revertRow( ) 。

  1. QSqlTableModel.setEditStrategy (self, EditStrategy strategy)

设置的策略对数据库中的值编辑strategy

这将恢复所有挂起的更改。

See also editStrategy()和revertAll( ) 。

  1. QSqlTableModel.setFilter (self, QString filter)

设置当前过滤器filter

该滤波器是一个SQLWHERE没有关键字条款WHERE(例如,name='Josephine')

如果已填充模型与数据库中的数据,该机型配备了新的过滤器重新选择它。否则,过滤器会在下一次应用select()被调用。

See also filter( )select( )selectStatement()和orderByClause( ) 。

  1. QSqlTableModel.setPrimaryKey (self, QSqlIndex key)

受保护的方法,让子类来设置主键key

通常情况下,只要您拨打的主索引会自动设置setTable( ) 。

See also primaryKey()和QSqlDatabase.primaryIndex( ) 。

  1. QSqlTableModel.setQuery (self, QSqlQuery query)

这个函数简单地调用QSqlQueryModel.setQuery (query) 。在你通常应该不叫QSqlTableModel。相反,使用setTable( )setSort( )setFilter( )等,来设置该查询。

See also selectStatement( ) 。

  1. bool QSqlTableModel.setRecord (self, int row, QSqlRecord record)

在指定的设定值row到的值record。返回True如果所有的值可以被置位,否则返回False 。

See also record( ) 。

  1. QSqlTableModel.setSort (self, int column, Qt.SortOrder order)

设置排序顺序columnorder。这不影响当前数据,使用新的排序顺序,调用刷新数据select( ) 。

See also sort( )select()和orderByClause( ) 。

  1. QSqlTableModel.setTable (self, QString tableName)

对这样的模式操作到数据库表tableName。不从表中选择数据,但其获取字段信息。

要填充模型与表的数据,调用select( ) 。

错误信息可以检索与lastError( ) 。

See also select( )setFilter()和lastError( ) 。

  1. QSqlTableModel.sort (self, int column, Qt.SortOrder order)

从重新实现QAbstractItemModel.sort( ) 。

通过对数据进行排序column与排序顺序order。这将立即选择数据,使用setSort( )来设置排序顺序不填充模型数据。

See also setSort( )select()和orderByClause( ) 。

  1. 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( ) 。

  1. bool QSqlTableModel.submitAll (self)

这种方法也是一个Qt槽与C + +的签名bool submitAll()

提交所有挂起的更改,并成功返回True 。返回False的错误,详细的错误信息,可以得到lastError( ) 。

成功模型将被重新填充。任何提出它的意见将失去他们的选择。

注意:在OnManualSubmit模式,已经提交的变更将不会从什么时候submitAll ()失败的缓存中清除。这允许事务被回滚,并再次重新提交,而不会丢失数据。

See also revertAll()和lastError( ) 。

  1. QString QSqlTableModel.tableName (self)

返回当前选定的表的名称。

  1. 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

  1. void beforeDelete (int)

这是该信号的默认超载。

这个信号是由发射deleteRowFromTable( )之前,row从当前活动的数据库表中删除。

  1. void beforeInsert (QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射insertRowIntoTable( )一个新行插入到当前活动的数据库表之前。这是将要被插入的值被存储在record并且可以进行修改将被插入之前,他们。

  1. void beforeUpdate (int,QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射updateRowInTable( )之前,row在当前活动的数据库表从值更新record

请注意,只有被标记为生成的值将被更新。所生成的标记可与设置QSqlRecord.setGenerated() ,并检查与QSqlRecord.isGenerated( ) 。

See also QSqlRecord.isGenerated( ) 。

  1. void primeInsert (int,QSqlRecord&)

这是该信号的默认超载。

这个信号是由发射insertRows( )中,当在给定的开始插入row当前活动的数据库表。该record参数可以被写入(因为它是一个参考),例如,以使用默认值的字段。