我创建了一个名为 A 的表,需要将数据插入其中。
但是,由于某种原因,SQLite 找不到表中的最后一列。
错误:
OperationalError: table A has no column named Byte
Run Code Online (Sandbox Code Playgroud)
我的代码如下:
# 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));
Run Code Online (Sandbox Code Playgroud)
注意:值 Col1、...、Col4、Byte 是由我的程序计算的,因此我需要一种动态方法来执行此操作。
另外,表 A 存储在我的磁盘上的哪里?我是否能够使用它进行查询,c.execute("SELECT * FROM A;");
而无需CREATE TABLE
在创建后重新运行命令A
?
我每次都会收到相同的 Byte 错误,但我不知道为什么。任何见解/一般提示将不胜感激。
您的代码无法在建议的变体中运行。首先,从查询字符串中删除注释行。这段代码对我来说效果很好:
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')]
Run Code Online (Sandbox Code Playgroud)
表“A”存储在文件“test.db”中。在本例中,“test.db”与脚本保留在同一文件夹中。如果加载此文件,并且它将有一个表“A”,您可以立即对表“A”执行查询。在这种情况下,尝试重新创建表将导致错误。