Tôi chạy đoạn mã sau từ trình thông dịch trăn, và mong đợi câu lệnh chèn không thành công và ném một loại ngoại lệ nào đó. Nhưng điều này không xảy ra:Tại sao khóa ngoài của sqlite3 không hoạt động?
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!?
...
>>>
Có ai biết tại sao điều này không muốn hoạt động không? Sự hiểu biết của tôi là chèn nên thất bại vì giá trị tôi đã cho t2(i)
không phải là một khóa chính trong t1
, nhưng nó vui vẻ làm điều đó anyway ...?
Tôi định nói rằng phải, vì tôi có thể làm cho nó hoạt động với trình thông dịch tương tác sqlite, nhưng sau đó tôi nhận ra rằng python có sqlite riêng của nó được xây dựng - Tôi phải có một cái mới trên hệ thống của mình nhưng không có python của tôi. Cảm ơn –
Ah, bạn đã đúng, tôi có 3.5.9. –