我正在python 2.7上使用sqlite3,我面临着多对多关系的问题。我从我取的主键,这样Sqlite插入不能用python
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
,当我做他们提供如无,空或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不会对任何事情有所帮助。 – abarnert