Вставка элементов кортежа в базу данных - PullRequest
0 голосов
/ 08 ноября 2011

У меня есть кортеж, в котором я хочу сохранить его элементы, я пытаюсь вставить его следующим образом, и он выдает следующую ошибку, что я делаю неправильно? 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 фото, адрес, заметка, дата) ЗНАЧЕНИЯ (?,?,?,?,?,?,?,?) ", self.records_to_be_inserTed) sqlite3.ProgrammingError: указано неверное количество привязок. В текущем операторе используется 8, а поставлено 0.

Ответы [ 2 ]

1 голос
/ 08 ноября 2011

Обратите внимание, что 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)
1 голос
/ 08 ноября 2011

В запросе должны быть все данные, готовые для вставки.Вы вызываете функцию в запросе, который, я думаю, вы хотите, который предоставляет данные, но это не сработает.Вам необходимо передать все данные в переменных или найти их в индексе кортежа (например: tuple_name [1], tuple_name [4] и т.

...