SQLite executemany要求的值超出预期

问题描述

我正在尝试使用SQLite将列表插入数据库,第一个值是具有AUTOINCREMENT属性的ID。这是代码:

# cursor.execute('''
#    CREATE TABLE products (
#        prod_id INTEGER PRIMARY KEY AUTOINCREMENT,#        prod_name VARCHAR(20),#        prod_brand VARCHAR(20),#        price FLOAT
#    )
# ''')

products = [
    ('Keyboard','Doctor Key',20.0),('Mouse','MasterClick',2.50)
]

cursor.executemany("INSERT INTO products VALUES (null,?,?),products")

我也尝试这样做:

cursor.executemany("INSERT INTO products (prod_id,prod_name,prod_brand,price) VALUES (null,productos")

但是在两种情况下,我都会遇到相同的错误:

 Traceback (most recent call last):
          File "leccion2-1.py",line 38,in <module>
            cursor.executemany("INSERT INTO products VALUES (null,products") 
TypeError: function takes exactly 2 arguments (1 given)

This answer对我不起作用。

谢谢。

解决方法

由于要传递变量而不是字符串,因此您需要在引号之外提供值。

cursor.executemany("INSERT INTO products VALUES (null,?,?)",products)

另请参阅此example

import sqlite3
con = sqlite3.connect("samples.db")
cur = con.cursor()

examples = [(2,"def"),(3,"ghi"),(4,"jkl")]
cur.executemany("INSERT INTO samples VALUES (?,examples)

for row in cur.execute("SELECT * FROM samples"):
    print row

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...