1

在 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。我究竟做错了什么?

4

1 回答 1

2

没有名为“QSPATIALITE”的内置数据库驱动程序,但您的 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语句检查错误。

于 2018-02-27T19:10:15.067 回答