Python\SQLite:表A中没有名为X的列。

6
我有一个名为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存储在我的磁盘上的哪个位置?在创建完A之后,我能否使用查询它,而不必重新运行CREATE TABLE命令?
我每次都会收到Byte相同的错误,但我不知道原因。任何见解/一般提示将不胜感激。

1
在创建表时漏掉了一个逗号,导致最后一列无法被识别。不过还是投了一个顶级答案。 - Black
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')]

文件'test.db'存储了表'A'。在这种情况下,'test.db'与脚本保存在同一文件夹中。如果您加载此文件,则将拥有一个名为'A'的表,您可以立即执行对该表的查询。在这种情况下,尝试重新创建表将导致错误。


被插入到A中的值是从我的Python程序计算出来的值。我不能在代码中硬编码这些值。我需要一种方法来动态地插入我的值。注释仅供参考,不在我的实际代码中。 - Black
在创建表时,我在倒数第二个字段和最后一个字段之间漏掉了逗号。 - Black

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接