如何正确构造引用附加数据库表的UPDATE语句?

时间:2014-04-16 20:47:39

标签: python database python-3.x sqlite

这个问题与Python3的sqlite3模块(SQLite数据库的DB-API 2.0接口)有关。

我正在尝试更新sqlite3数据库列,其中附加数据库表中存在等效值。我无法理解为什么我的sqlite语句失败并显示错误消息"没有这样的列"。我在下面发布了一个小例子。我的目标是更新"号码" table_b中的列,用于" word"列匹配"字符串"附加数据库" db1"中table_a的列。

非常感谢任何帮助。 TIA你的时间。

import sqlite3
conn = sqlite3.connect('db1.dat')
c = conn.cursor()
c.execute('''CREATE TABLE table_a (string TEXT)''')
c.execute('''INSERT INTO table_a VALUES ('Lorem')''')
c.execute('''INSERT INTO table_a VALUES ('ipsum')''')
c.execute('''INSERT INTO table_a VALUES ('dolor')''')
conn.commit()
c.close

conn = sqlite3.connect('db2.dat')
c = conn.cursor()
c.execute('''CREATE TABLE table_b (word TEXT, number INTEGER)''')
c.execute('''INSERT INTO table_b VALUES ('sit', 0)''')
c.execute('''INSERT INTO table_b VALUES ('amet', 0)''')
c.execute('''INSERT INTO table_b VALUES ('dolor', 0)''')
conn.commit()
c.execute('''ATTACH 'db1.dat' AS db1''')
c.execute('''UPDATE table_b SET number = 1 WHERE table_b.word = table_a.string''')
-----------------------------------------------------------------------------------------
OperationalError                          Traceback (most recent call last)
/home/newb/sandbox/<ipython-input-1-3659f61710d7> in <module>()
     17 c.execute('''PRAGMA database_list''')
     18 c.fetchall()
---> 19 c.execute('''UPDATE table_b SET number = 1 WHERE table_b.word = table_a.string''')

OperationalError: no such column: table_a.string

1 个答案:

答案 0 :(得分:0)

没关系,我明白了。 我正在寻找的更新声明是:

c.execute('''UPDATE table_b SET number = 1 WHERE table_b.word IN (SELECT string FROM table_a)''')

我在这里找到了指导: http://www.tutorialspoint.com/sqlite/sqlite_sub_queries.htm