2013-12-14 34 views
1

我想添加信息到数据库,其中一个细节是外键,但是当我打开外键时,没有插入任何内容。如果外键全部关闭,但添加了外键详细信息。INSERT不工作时foreign_keys

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_() 
+0

我有一个非常类似的问题。要调查的信息的一个建议是在exec_命令之后检查查询中的lastError值。在我的程序中,结果是“参数计数不匹配”错误 – dvntehn00bz

回答

0

可能的原因是您的插入操作可能违反了外键约束(例如,是否有包含主键项“ProductTypeID”的ProductType表中的条目)。

尝试诊断的快速方法是检查query.exec_()的状态返回值。对于大多数应用程序,总是测试它是很好的。如果查询执行时没有错误,它应该返回true。您可以快速换你exec_:

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

query.lastError()将返回一个QSqlError类型,所以你可以根据需要格式化错误类型,文字等。这个错误文本有时是有用的。

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