我有一个元组,我想存储它的元素,我试图插入它如下,它给出了以下错误,我做错了什么? records_to_be_inserted是具有8个元素的元组。
with self.connection:
cur = self.connection.cursor()
cur.executemany("INSERT INTO rehberim(names, phone, mobile, email, \
photo, address, note, date) VALUES(?, ?, ?, ?, ?, ?, ?, ?)", self.records_to_be_inserTed)
追踪(最近一次通话): 在save_records中输入文件“/home/tayfun/workspace/personal_guide/modules/mainwindow.py”,第57行 照片,地址,备注,日期)VALUES(?,?,?,?,?,?,?,?)“,self.records_to_be_inserTed) sqlite3.ProgrammingError:提供的绑定数量不正确。当前语句使用8,并且提供了0。
答案 0 :(得分:1)
查询必须准备好插入所有数据。 您正在调用查询中的函数,我想您希望它提供数据,但不会工作。 您需要传递变量中的所有数据或在元组索引中找到它们(如:tuple_name [1],tuple_name [4]等)。
示例:
myTuple = ['a','b','c','d','e','f','g']
cur.executemany("INSERT INTO rehberim(names, phone, mobile, email, \
photo, address, note, date) VALUES({0}, {1}, {2}, {3}, {4}, {5}, {6}" .format (myTuple[1], myTuple[2], myTuple[3], myTuple[4], myTuple[5], myTuple[6], myTuple[7])
答案 1 :(得分:1)
请注意,executemany
用于插入多行,例如
import sqlite3
""" the table structure is:
create table tab
a char(1),
b char(2),
c char(3)
)
"""
conn = sqlite3.connect('C:\\test.db')
stmt = "insert into tab (a, b, c) values (?, ?, ?)"
cur = conn.cursor()
## many rows
vals = [('1','2','3'), ('2','3','4'), ('3','4','5')]
cur.executemany(stmt, vals)
cur.close()
这将导致数据库中的三行。如果是因为您在一个查询中有多个值,则需要对其进行格式化!
修改:添加了词典格式
通过使用以下方法,您无需考虑format
调用中值的顺序,因为字典中的键将值映射到{key_word}
占位符。
values = {'a' : 'value_a',
'b' : 'value_b'}
stmt = "insert into tab (col_a, col_b) values ({a}, {b})".format(**values)