【发布时间】:2016-11-23 23:53:15
【问题描述】:
我对外键在 sqlite3 中的工作方式的理解遇到了一些麻烦。
我试图让一个表 userstuff 中的用户 ID(james)在我的 otherstuff 表中显示为外键。然而,当我查询时,它返回 None。
到目前为止我已经尝试过:
- 启用外键支持
- 重写测试脚本(这里正在讨论)以隔离问题
- 在发现我最初编写代码的方式存在问题后,我重新编写了一些代码
- 经过一些研究,我遇到了联接,但我认为这不是解决方案,因为据我所知,我当前的查询是联接的替代方法
代码
将 sqlite3 导入为 sq
类 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()
非常感谢
【问题讨论】:
标签: python-3.x sqlite