Python\SQLite: 表A没有名为X的列
我有一个叫做A的表格,我已经创建好了,现在需要往里面插入数据。
不过,表格里的最后一列不知道为什么被SQLite找不到。
错误信息:
OperationalError: table A has no column named Byte
我的代码如下:
# Create the table
c.execute("DROP TABLE A;");
c.execute("""CREATE TABLE IF NOT EXISTS A
(id INTEGER PRIMARY KEY,
Col1 TEXT,
Col2 INTEGER,
Col3 TEXT,
Col4 TEXT,
Byte TEXT);""");
# Insert data into A
c.execute("""INSERT INTO A
(Col1, Col2, Col3, Col4, Byte) VALUES (?, ?, ?, ?, ?)""",
(Col1, Col2, Col3, Col4, Byte));
注意:Col1到Col4和Byte这些值是我的程序计算出来的,所以我需要一种动态的方法来处理这些。
另外,表格A存储在我的电脑哪个地方呢?我能否在不重新运行CREATE TABLE
命令的情况下,直接用c.execute("SELECT * FROM A;");
来查询它?
我每次都在Byte那里遇到同样的错误,我也不太明白为什么。任何见解或一般性的建议都非常欢迎。
2 个回答
3
到目前为止,我观察到,如果你修改了表格的列名,但没有删除包含旧列名的表格,这样做会导致错误。
注意:我知道你已经执行了 c.execute("DROP TABLE A;"),我之所以提到这一点,是为了让你明白,这可能是你即使做对了很多事情,仍然会出现错误的原因之一。
简单来说,如果你修改了列名,就得删除这个表格,然后重新创建一个新表。如果删除表格不是一个可行的选择,那就把列名改回去,这样就能像以前一样正常工作了。
2
你的代码在提到的变体中无法运行。首先,去掉查询字符串中的注释行。这个代码对我来说运行得很好:
import sqlite3
con = sqlite3.connect('test.db')
c = con.cursor()
c.execute("DROP TABLE A;")
#computing values
Col1, Col2, Col3, Col4, Byte = ('1234', 2, '5678', 'qwerty', 'bytestr')
c.execute("""CREATE TABLE IF NOT EXISTS A
(id INTEGER PRIMARY KEY,
Col1 TEXT,
Col2 INTEGER,
Col3 TEXT,
Col4 TEXT,
Byte TEXT);""")
# Insert data into A
c.execute("""INSERT INTO A
(Col1, Col2, Col3, Col4, Byte) VALUES (?, ?, ?, ?, ?)""",
(Col1, Col2, Col3, Col4, Byte))
c.execute('SELECT * FROM A;')
print c.fetchall() #[(1, u'1234', 2, u'5678', u'qwerty', u'bytestr')]
表'A'存储在一个名为'test.db'的文件中。在这种情况下,'test.db'和脚本在同一个文件夹里。如果你加载这个文件,它会有一个表'A',你可以直接对表'A'执行查询。在这种情况下,尝试重新创建这个表会导致错误。