0

我有一个元组,我想存储它的元素,我试图将它插入如下,它给出了以下错误,我做错了什么?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)

Traceback(最近一次通话最后一次):文件“/home/tayfun/workspace/personal_guide/modules/mainwindow.py”,第 57 行,在 save_records 照片、地址、注释、日期)VALUES(?,?,?,?,? , ?, ?, ?)", self.records_to_be_inserTed) sqlite3.ProgrammingError: 提供的绑定数量不正确。当前语句使用 8,提供了 0。

4

2 回答 2

3

请注意,这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)
于 2011-11-08T14:14:17.910 回答
2

查询必须准备好插入所有数据。您在查询中调用了一个函数,我猜您希望它提供数据但不起作用。您需要在变量中传递所有数据或在元组索引中定位它们(​​例如: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])
于 2011-11-08T13:58:26.677 回答