动态插入Sqlite数据库错误

时间:2017-06-02 20:51:58

标签: python database sqlite

我有以下代码

cur.executemany("INSERT INTO "+tablename+" (name,"+item+") VALUES(?,?)",(data,))

data动态插入值  现在我有两个问题:  如果我使用VALUES(?,?)",(data))语法而不使用, after data  我会得到这个错误

Error Incorrect number of bindings supplied. The current statement uses 2, and there are 4 supplied.:

只能通过VALUES(?,?)",(data,)),

一起使用语法来解决

它解决了这个问题,数据被插入到表中。 但它创建了另一个问题,我无法查询数据库并使用类似

的内容

cursor = cur.execute("select * from "+tablename+" where name="+name+"")

我会收到此错误:

Error no such column: deek:

我不知道如何使用上面提到的语法查询数据库。

我从上面得到了上面的语法 sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 74 supplied

完整代码供参考:

import sqlite3
import sys
tablename='asfoor'
table_data=['Name','a','b','c']

try:
    con = sqlite3.connect('dbtrials.db')
    cur = con.cursor()
    cur.execute("DROP TABLE IF EXISTS "+tablename+"")
    cur.execute("CREATE TABLE "+tablename+" (ID INTEGER PRIMARY KEY AUTOINCREMENT ,Name TEXT, "+table_data[1]+" TEXT, "+table_data[2]+" TEXT, "+table_data[3]+" TEXT )")



    name='deek'
    item='a'
    data=[name,item]
    cur.executemany("INSERT INTO "+tablename+" (name,"+item+") VALUES(?,?)",(data,))
    cursor = cur.execute("select * from "+tablename+" where name="+name+"")
    for row in cursor  :
              print(row)


except sqlite3.Error as e:

    print ("Error %s:" % e.args[0])
    sys.exit(1)

finally:

    if con:
        con.close()

2 个答案:

答案 0 :(得分:1)

错误的原因是因为您忘记在字符串周围加上引号。它应该是:

cursor = cur.execute("select * from "+tablename+" where name='"+name+"'")

但最好使用参数化查询:

cursor = cur.execute("select * from "+tablename+" where name= %s", (name,))

答案 1 :(得分:1)

executemany期望序列或映射的迭代器作为第二个参数。 您的输入应如下所示:data = [[name, item]]

所以你期望的查询:

  1. deeka(2 args)
  2. 如果没有内部列表,它会将字符串作为字符序列,因此您的查询是:

    1. deek(4 args)

    2. a(1 arg)