2014-04-28 66 views
2

我有一个名为A的表,我创建并需要插入数据。Python SQLite:表A没有列名为X

但是,表中的最后一列由于某种原因未被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,字节由我的程序计算的,因此我需要一个这样做的动态方式。

另外,表A存储在我的磁盘上?我能否使用c.execute("SELECT * FROM A;");来查询它,而不必在创建A后重新运行CREATE TABLE命令?

我每次都会收到Byte的错误,我不知道为什么。任何洞察力/一般技巧将不胜感激。

+0

在创建导致最后一列未被识别的表格时错过了逗号。无论如何,投票都是顶级答案。 – Black

回答

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'。在这种情况下,尝试重新创建表格将导致错误。

+0

插入到A中的值是我的python程序中的计算值。我不能硬编码这些值。我需要一种方法来动态地插入我的值。该评论仅供人们参考,并不在我的实际代码中。 – Black

+0

我修改了代码。这是你想要的? – NorthCat

+0

创建表时,我在第二个和最后一个字段之间缺少一个逗号。 – Black

相关问题