Foreign-Key
外鍵的意外行為
我想將 Sqlite3 與 Python 一起使用並創建如下查詢:
import sqlite3 from sqlite3 import Error db = sqlite3.connect("temp.sqlite") cursor = db.cursor() cursor.execute("PRAGMA foreign_keys = ON") #Turns foreign_key support on cursor.execute("""DROP TABLE IF EXISTS tx""") cursor.execute("""CREATE TABLE tx ( tx_index BIGINT NOT NULL PRIMARY KEY, hash CHAR(64) NOT NULL, rbf INT NOT NULL, tx_in_value BIGINT NOT NULL, tx_out_value BIGINT NOT NULL );""") cursor.execute("""INSERT INTO tx VALUES ('1','2','3','11','11')""") cursor.execute("""INSERT INTO tx VALUES ('2','2','3','11','11')""") cursor.execute("""DROP TABLE IF EXISTS txin""") cursor.execute("""CREATE TABLE txin ( addr BIGINT NOT NULL, value BIGINT NOT NULL, tx_index BIGINT NOT NULL, FOREIGN KEY (tx_index) REFERENCES tx (tx_index) );""") list_tuple = [] list_tuple.append(('11','12','1')) list_tuple.append(('12','12','2')) # Uncommenting the line below will throw an error #list_tuple.append(('12','12','3')) cursor.executemany("""INSERT INTO txin VALUES (?,?,?)""", list_tuple) cursor.execute("""SELECT * FROM tx""") cursor.execute("""SELECT * FROM txin""") db.commit() db.close()
上面的查詢,在沒有 Python here的情況下進行測試時,工作正常,但在 Python 中,執行會出現以下錯誤:
cursor.execute(“INSERT INTO txin VALUES (?,?,?)”, insert_trx_in) sqlite3.IntegrityError: FOREIGN KEY 約束失敗
這是問題的簡單版本。在實際問題中,我使用executemany插入任何想法?
我相信這個錯誤是由於cursor.executemany試圖插入的外鍵不匹配造成的。如果要插入 TABLE2 的外鍵在 TABLE1(主鍵持有者)中不存在,則會引發錯誤。
這意味著如果 TABLE 1 在主鍵列中有 2 個值,那麼在 TABLE2 中插入值時,外鍵的值必須與 TABLE1 中的主鍵值之一完全匹配。