Python+SQlite3,使用外键

Python+SQlite3,使用外键,python,sqlite,foreign-keys,Python,Sqlite,Foreign Keys,嗨 我正在为我工作场所的客户数据库编写这个小前端。我们只需要一些简单明了的东西来跟踪客户、任务等 这有点让人困惑,因为我正在同时学习python和SQL,但我想在继续之前让整个外键关系部分顺利工作 我想做的是能够将许多任务分配给一个客户 以下是一个例子: conn = sqlite3.connect(':memory:') cur = conn.cursor() cur.execute('''CREATE TABLE customers (custid INTEGER PRIMARY KEY A

嗨 我正在为我工作场所的客户数据库编写这个小前端。我们只需要一些简单明了的东西来跟踪客户、任务等

这有点让人困惑,因为我正在同时学习python和SQL,但我想在继续之前让整个外键关系部分顺利工作

我想做的是能够将许多任务分配给一个客户

以下是一个例子:

conn = sqlite3.connect(':memory:')
cur = conn.cursor()
cur.execute('''CREATE TABLE customers (custid INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, phone TEXT, email TEXT, notes TEXT)''')
cur.execute('''CREATE TABLE tasks (taskid INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, notes TEXT, taskcust INTEGER, FOREIGN KEY(taskcust) REFERENCES customer(custid))''')

cur.execute('''INSERT INTO customers (name, phone, email, notes) VALUES('Jeff', '555555', 'jeff@foo.com', 'balblalal')''')
cur.execute('''INSERT INTO tasks (title, notes, taskcust) VALUES ('Toshiba A200', 'replace RAM, add 2 gigs', 1)''')
cur.execute('''INSERT INTO tasks (title, notes, taskcust) VALUES ('WD External HDD', 'Diagnose, tick of death, hdd probably dead', 1)''')
现在我有两个任务分配给“Jeff”。如果我想打印Jeff的联系信息和他的所有任务怎么办

cur.execute('''SELECT * FROM customers where custid=1''')
for row in cur:
    for i in row:
        print i
cur.execute('''SELECT * FROM tasks WHERE taskcust=1''')
for row in cur:
    for i in row:
        print i
我做得对吗?

不要缩进

    for row in cur:
        for i in row:
            print i
在当前下方执行“从taskcust=1的任务中选择*


除此之外,我认为这一切都是你想要的。外键很有用,因为现在如果你想找到要求你更换RAM的客户,可以添加2个GIG,你可以追溯到客户记录。

谢谢,缩进只是一个输入错误:只是想确保我做得正确。这就是我想的。根据数据库系统的不同,在你被它咬之前,先快速检查一下,外键是强制执行的,因此,如果在你尝试插入任务时,给定ID的客户不存在,DB可能会抛出错误。我认为外键没有被正确执行。我可以为一个不存在的客户创建一个任务,如果我删除了一个客户,分配给他的任务将保持不变:S似乎外键的行为就像一个普通的整数列…它显示为默认情况下禁用SQLite的外键约束,以便向后兼容。我明白了。谢谢,conn=sqlite3.connectdb conn.execute'pragma-foreign\u-keys=on'\uuuuuuuuuu似乎正在工作