添加到数据库SQlite Python

时间:2013-06-07 16:06:28

标签: python sqlite

我在数据库中输入值时收到错误:

values = []
for dictionary in dictionaries:
        for element in keys:
            if element in cols:
                curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,\
                              ?,?,?,?,?,?,?,?,?,?,?,?,?)', dictionary[element])
                #values.append(dictionary[element])
            else:
                curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,\
                              ?,?,?,?,?,?,?,?,?,?,?,?,?)', 'NA')
                #values.append('NA')

        #curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', tuple(values))


Error: OperationalError: near "?": syntax error

基本上,我遍历每个字典访问某些值并尝试将它们输入到数据库中。我检查字典的“键”是否在另一个列表中,如果是,则向数据库添加一些值,否则添加“NA”。

我已经提供了如何在数据库中定义表:

curs.execute("CREATE TABLE Root_table(\
                Id INTEGER PRIMARY KEY, 'a' TEXT, 'b' TEXT,\
                'c' TEXT, 'd' TEXT, 'e' TEXT, 'f' TEXT, 'g' TEXT, 'h' TEXT,\
                'i' TEXT, 'j' TEXT,'k' TEXT, 'l' TEXT, 'm' TEXT, 'n' TEXT,\
                'o' TEXT, 'p' TEXT, 'q' TEXT, 'r' TEXT, 's' TEXT, 't' TEXT,\
                'u' TEXT, 'v' TEXT, 'w' TEXT, 'x' TEXT, 'y' TEXT, 'z' TEXT)")

?中的问号总数curs.execute('INSERT INTO Root_table(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', dictionary[element])为25,而表中有26列(第一个是ID元素,应根据行数自动增加)。

1 个答案:

答案 0 :(得分:1)

您的语法不正确。您需要在查询中添加values,并且由于您没有为所有列提供数据,因此您需要指定以下内容:

import sqlite3
c = sqlite3.connect(':memory:')
c.execute("create table mytable (_id integer primary key, a, b)")
c.execute("insert into mytable (a,b) values  (?, ?)", (2,3))
c.execute('select * from mytable').fetchall()
# [(1,2,3)]