我正在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