Python + SQlite3,使用外键

时间:2011-01-04 20:53:15

标签: python sqlite foreign-keys

您好 我正在为我的工作场所编写一个客户数据库的这个小前端。我们只需要轻松简单的东西来跟踪客户,任务和内容。

这让我感到困惑,因为我正在同时学习python和SQL,但我希望在继续之前让整个外键关系部分顺利运行。

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

这是一个例子:

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)''')

所以现在我有2个任务分配给'杰夫'。如果我想打印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
我正在做对吗?

1 个答案:

答案 0 :(得分:2)

不要缩进

    for row in cur:
        for i in row:
            print i

低于cur.execute('''SELECT * FROM tasks WHERE taskcust=1''')

除此之外,我认为一切都按照你想要的方式运作。外键非常有用,因为现在如果您想找到要求您“替换RAM,添加2个演出”的客户,您可以追溯到客户记录。