我從python解釋器運行以下代碼,並期望insert語句失敗並拋出某種異常。但它沒有發生:爲什麼我的sqlite3外鍵不工作?
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
>>> conn = sqlite3.connect("test.db")
>>> conn.executescript("""
... pragma foreign_keys=on;
... begin transaction;
... create table t1 (i integer primary key, a);
... create table t2 (i, a, foreign key (i) references t1(i));
... commit;
... """)
<sqlite3.Cursor object at 0x0229DAA0>
>>> c = conn.cursor()
>>> c.execute("insert into t2 values (6, 8)")
<sqlite3.Cursor object at 0x0229DAD0>
>>> #???
...
>>> conn.commit()
>>> #???????????
...
>>> c.execute("select * from t2")
<sqlite3.Cursor object at 0x0229DAD0>
>>> c.fetchall()
[(6, 8)]
>>> #but why!?
...
>>>
有沒有人知道爲什麼這不想工作?我的理解是插入應該失敗,因爲我給出的t2(i)
的值不是t1
中的主鍵,但它無論如何都樂於執行......?
我要說我必須,因爲我可以讓它與sqlite交互式解釋器一起工作,但後來我意識到python有自己的sqlite內置 - 我必須在我的系統上有一個新的,但不是我的蟒蛇。謝謝 – 2010-07-21 03:21:07
啊,你說得對,我有3.5.9。 – 2010-07-21 03:24:25