这个问题与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
答案 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