我在 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));