PythonでSqlite3を使用し、次のようにクエリを作成します。
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 constraint failed
それは問題のより単純なバージョンです。実際の問題では、executemanyを使用して挿入します。
cursor.executemanyが挿入しようとした外部キーの不一致が原因でエラーが発生したと思います。 TABLE2に挿入される外部キーがTABLE1(主キーホルダー)に存在しない場合、エラーがスローされます。
つまり、TABLE 1の主キー列に2つの値がある場合、TABLE2に値を挿入するときに、外部キーの値はTABLE1の主キー値の1つと正確に一致する必要があります。