【问题标题】:PyQt QSqlQuery.prepare() returns falsePyQt QSqlQuery.prepare() 返回 false
【发布时间】:2018-08-07 07:54:49
【问题描述】:

在 PyQt4 中,我创建了一个 QSqlDatabase 类似

slpath = 'path/to/my/db.sqlite'
db = QSqlDatabase.addDatabase('QSPATIALITE')
db.setDatabaseName(slpath)

这似乎有效。现在我尝试UPDATE一个表layer_styles如下:

query = QSqlQuery(db) #db cp. above
query.prepare("UPDATE layer_styles SET f_table_catalog=:path;")
query.bindValue(":path", slpath)
query.exec_()

但是query.prepare(...) 返回false。我做错了什么?

【问题讨论】:

    标签: python pyqt pyqt4 qsqlquery qsqldatabase


    【解决方案1】:

    没有名为“QSPATIALITE”的built-in database driver,但您的QGIS 安装可能会提供具有该名称的自定义SpatiaLite 驱动程序。这个驱动是对 sqlite 的扩展,所以你可以这样使用它:

    slpath = 'path/to/my/db.sqlite'
    if QSqlDatabase.isDriverAvailable('QSPATIALITE'):
        db = QSqlDatabase.addDatabase('QSPATIALITE')
    else:
        db = QSqlDatabase.addDatabase('QSQLITE')
    db.setDatabaseName(slpath)
    if not db.open():
        print('ERROR:', db.lastError().text())
    

    如果prepare()exec_()仍然失败,可以使用query.lastError()检查sql语句中的错误。

    【讨论】:

    • 至少从 PyQGIS QSPATIALITE 内部可以正常工作,即使不在标准驱动程序中也是如此。我是从这个帖子的答案gis.stackexchange.com/questions/167707/… 中得到的,我只是忘记了db.open()...
    • @JochenSchwarze。谢谢。我确实怀疑它可能是一个自定义驱动程序,但由于某种原因我找不到任何有关它的信息,所以我得出了错误的结论。我已经相应地修改了我的答案。
    猜你喜欢
    • 1970-01-01
    • 2019-06-27
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    • 2015-08-02
    • 2012-05-17
    • 2013-10-26
    • 2013-01-06
    相关资源
    最近更新 更多