将元组的元素插入数据库

时间:2011-11-08 13:51:44

标签: python sqlite lastinsertid

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

2 个答案:

答案 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)