在PyQt4中,我创建一个QSqlDatabase

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


这似乎有效。现在,我尝试UPDATElayer_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。我究竟做错了什么?

最佳答案

没有名为“ 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语句中的错误。

关于python - PyQt QSqlQuery.prepare()返回false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49012565/

10-11 21:07