【问题标题】:PyQt4: Display progress bar while qtsql table is being loadedPyQt4:在加载 qtsql 表时显示进度条
【发布时间】:2012-10-09 04:47:37
【问题描述】:

是否可以获取QtSql.QSqlTableModel.setTable(tableName)之后和QtSql.QSqlTableModel.select()之前的表中的记录数? 关于 setTable 函数的 Qt 文档说:

将模型操作的数据库表设置为 tableName。不从表中选择数据,而是获取其字段信息。

所以这些是我的问题:) 哪些字段信息?它是否包含记录数?必要时如何访问它? (我想在加载表格时显示进度条)

【问题讨论】:

    标签: python qt pyqt pyqt4 qtsql


    【解决方案1】:

    调用setTable后,你可以通过QSqlQuery对象通过SQL命令获取表的字段数、字段名和记录数,例如:

    model = QSqlTableModel(db=your_db)
    model.setTable("your_table")
    ...
    query = QSqlQuery("SELECT column_name FROM information_schema.columns WHERE table_name='your_table'")
    query.next()
    print query.numRowsAffected() # print the number of fields
    query.previous()
    while query.next():
        print query.value(0).toString()  # print the field name
    

    将打印表“your_table”的字段数和字段名称。

    要在不填充模型的情况下获取行数,您可以使用COUNT 命令,如下所示:

    query = QSqlQuery("SELECT COUNT(*) FROM your_table")
    query.next()
    print query.value(0).toString()  # print the number of records
    print model.rowCount()  # print 0 as the model has not been populated yet
    

    我认为COUNT(1) 的性能优于COUNT(*),但这似乎是一个神话(请参阅this SO question)。

    【讨论】:

    • @Vincent 谢谢!你知道计算行数需要多长时间吗?如果它需要尽可能多地填充表格,那么它可能效率很低......
    • 不,我不知道如何计算。
    猜你喜欢
    • 2011-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2016-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多