1

我正在尝试向数据库添加信息,其中一个细节是外键,但是当我打开外键时,没有插入任何内容。当外键关闭时,除了添加外键详细信息外。

def add_to_database(self, details):
    query = QSqlQuery()
    query.exec_("""PRAGMA foreign_keys = ON""")
    query.prepare("""insert into Product (Quantity, ProductStatus, Price, ProductTypeID) values
                      (?,?,?,?)""")
    query.addBindValue(details["quantity"])
    query.addBindValue(details["product_status"])
    query.addBindValue(details["price"])
    query.addBindValue(self.product_type_id)
    query.exec_()
4

1 回答 1

0

您的插入可能违反外键约束的可能原因(例如,在具有主键条目“ProductTypeID”的 ProductType 表中是否存在条目)。

尝试诊断的一种快速方法是检查从 query.exec_() 返回的状态。对于大多数应用程序,最好总是对此进行测试。如果查询执行没有错误,它应该返回 true。您可以快速包装您的 exec_:

if not query.exec_():
  print query.lastError()

query.lastError() 将返回一个QSqlError类型,因此您可以根据需要格式化错误类型、文本等。此错误文本有时很有用。

对于我自己,我发现我使用的SQLite 数据类型存在问题,当我打开外键限制时,这会导致准备/绑定调用出现故障。特别是,当 QSQLITE 想要“整数”时,我使用“int”作为某些主键/外键的数据类型。

于 2014-02-06T22:52:41.233 回答