【发布时间】:2013-07-31 17:09:30
【问题描述】:
我在 python 2.7 上使用 sqlite3,我遇到了多对多关系的问题。我有一个表,我正在从中获取它的主键,如下所示
current.execute("SELECT ExtensionID FROM tblExtensionLookup where ExtensionName = ?",[ext])
然后我从另一个表中获取另一个主键
current.execute("SELECT HostID FROM tblHostLookup where HostName = ?",[host])
现在我正在做的是我有第三张表,这两个键作为外键,我像这样插入它们
current.execute("INSERT INTO tblExtensionHistory VALUES(?,?)",[Hid,Eid])
问题是我不知道为什么,但最后一次插入不起作用,它一直出错。现在我尝试的是:
首先我认为这是因为我有一个我没有提供的最后一个映射表的自动增量主 ID,但它不应该认为它是自动增量的吗?但是我继续尝试添加 Null,None,0 但没有任何效果。
其次,我想可能是因为我没有从上面的表格中获取值,所以我尝试将其打印出来并显示它可以正常工作。
有什么建议我在这里做错了吗?
编辑: 当我不提供主键时,我会收到错误
The table has three columns but you provided only two values
当我将它们提供为 None、Null 或 0 时,它会说
Parameter 0 is not supported probably because of unsupported type
我尝试实现 @abarnet 方式,但仍然说不支持参数 0
connection = sqlite3.connect('WebInfrastructureScan.db')
with connection:
current = connection.cursor()
current.execute("SELECT ExtensionID FROM tblExtensionLookup where ExtensionName = ?",[ext])
Eid = current.fetchone()
print Eid
current.execute("SELECT HostID FROM tblHostLookup where HostName = ?",[host])
Hid = current.fetchone()
print Hid
current.execute("INSERT INTO tblExtensionHistory(HostID,ExtensionID) VALUES(?,?)",[Hid,Eid])
编辑 2:
数据库架构是:
表 1:
CREATE TABLE tblHostLookup (
HostID INTEGER PRIMARY KEY AUTOINCREMENT,
HostName TEXT);
表2:
CREATE TABLE tblExtensionLookup (
ExtensionID INTEGER PRIMARY KEY AUTOINCREMENT,
ExtensionName TEXT);
表3:
CREATE TABLE tblExtensionHistory (
ExtensionHistoryID INTEGER PRIMARY KEY AUTOINCREMENT,
HostID INTEGER,
FOREIGN KEY(HostID) REFERENCES tblHostLookup(HostID),
ExtensionID INTEGER,
FOREIGN KEY(ExtensionID) REFERENCES tblExtensionLookup(ExtensionID));
【问题讨论】:
-
您在通话中遇到了哪些错误?另外,您的 tblExtensionHistory 表的完整架构是什么?
-
执行插入后,您必须致电
db.commit() -
@JoranBeasley:如果他从
INSERT收到错误,COMMIT将无济于事。 -
你的正确阅读理解对我来说失败了......我没有看到他有错误
-
你还没有给我们足够的信息。向我们展示实际代码、您传递的实际值以及实际的数据库架构。在不知道您传入的类型或数据库期望的类型的情况下,我们无法帮助您调试类型错误。
标签: python insert sqlite many-to-many foreign-key-relationship