У меня возникли проблемы с моим пониманием того, как внешние ключи работают в sqlite3.Внешние ключи Sqlite3 Python3
Я пытаюсь получить идентификатор пользователя (james) в одной таблице, чтобы он отображался как внешний ключ в моей таблице других товаров. Но когда я запрашиваю, он возвращает None.
До сих пор я пытался:
- Включение внешнего ключа поддержки
- Переписывая тестовый сценарий (который обсуждается здесь), чтобы изолировать Issue
- Я переписан код, после обнаружения проблем в том, как я изначально написал его
- После некоторых исследований я столкнулся с объединениями, но я не думаю, что это решение, поскольку мой текущий запрос является альтернативой объединениям, насколько мне известно
Код
импорт sqlite3 в кв
класс DATAB:
def __init__(self):
self.conn = sq.connect("Atest.db")
self.conn.execute("pragma foreign_keys")
self.c = self.conn.cursor()
self.createtable()
self.defaultdata()
self.show_details() # NOTE DEFAULT DATA ALREADY RAN
def createtable(self):
self.c.execute("CREATE TABLE IF NOT EXISTS userstuff("
"userid TEXT NOT NULL PRIMARY KEY,"
" password TEXT)")
self.c.execute("CREATE TABLE IF NOT EXISTS otherstuff("
"anotherid TEXT NOT NULL PRIMARY KEY,"
"password TEXT,"
"user_id TEXT REFERENCES userstuff(userid))")
def defaultdata(self):
self.c.execute("INSERT INTO userstuff (userid, password) VALUES (?, ?)", ('james', 'password'))
self.c.execute("INSERT INTO otherstuff (anotherid, password, user_id) VALUES (?, ?, ?)",('aname', 'password', 'james'))
self.conn.commit()
def show_details(self):
self.c.execute("SELECT user_id FROM otherstuff, userstuff WHERE userstuff.userid=james AND userstuff.userid=otherstuff.user_id")
print(self.c.fetchall())
self.conn.commit()
----- ПРИМЕЧАНИЕ КОД НИЖЕ ЭТО ИЗ НОВОГО ФАЙЛА ---------
import test2 as ts
x = ts.DATAB()
Большое спасибо
Итак, я попытался добавить следующую строку кода self.c.execute ("INSERT INTO otherstuff (user_id) VALUES (?)", ('James')), но теперь я получил несколько ошибок привязки. Правильно ли я говорю, что проблема с моим кодом заключается в том, что мне нужно дать таблице otherstuff идентификатор james для использования в качестве внешнего ключа? – Padwas
'('james')' строка с пятью элементами; одноэлементный кортеж будет '('james',)'. –
Теперь после запроса данных снова я получаю sqlite3.OperationalError: no такой столбец: james, но это не должно происходить, поскольку теперь есть данные во всех столбцах. Я обновил основной код с изменениями и до сих пор не вижу своей проблемы. – Padwas