Я изо всех сил пытаюсь понять, почему мой внешний ключ в SQLite поврежден.
После сокращения моего кода до минимального рабочего примера я застрял с
import sqlite3
import pandas as pd
bar = 99
create_foo = 'CREATE TABLE foo ( id INTEGER PRIMARY KEY, bar INTEGER NOT NULL )'
create_baz = 'CREATE TABLE baz ( ' \
' id INTEGER PRIMARY KEY,' \
' foo_id INTEGER NOT NULL,' \
' FOREIGN KEY(foo_id)' \
' REFERENCES foo(id) )'
insert_foo = 'INSERT INTO foo (bar) VALUES (?)'
insert_baz = 'INSERT INTO baz (foo_id) VALUES (?)'
conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute(create_foo)
c.execute(create_baz)
c.execute(insert_foo, (bar,))
conn.commit()
table = pd.read_sql_query(f'SELECT id FROM foo WHERE bar={bar}', conn)
bar_id = table.loc[0, 'id']
print(bar_id)
, который возвращает 1
и
c = conn.cursor()
c.execute(insert_baz, (bar_id,))
conn.commit()
table = pd.read_sql_query(f'SELECT * FROM baz WHERE foo_id={bar_id}', conn)
print(table.empty)
, который возвращает True
Если я посмотрю на таблицу
pd.read_sql_query('SELECT * FROM baz', conn).loc[0, 'foo_id']
, я увижу, что мой иностранный теперь b'\x01\x00\x00\x00\x00\x00\x00\x00'
, пока я ожидал 1
.
Как мой внешний ключ поврежден?