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

6 投票
2 回答
14938 浏览
提问于 2025-04-18 04:34

我有一个叫做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'执行查询。在这种情况下,尝试重新创建这个表会导致错误。

撰写回答