SQL вставить запрос через цикл Python - PullRequest
0 голосов
/ 27 января 2019

Я пытаюсь вставить несколько строк в таблицу, используя цикл for в python, используя следующий код:

ID = 0
values = ['a', 'b', 'c']
for x in values:
   database.execute("INSERT INTO table (ID, value) VALUES (:ID, :value)",
                     ID = ID, value = x)
   ID += 1

Я ожидал, что этот фрагмент кода будет вставлентри строки в мой стол.Единственная проблема заключается в том, что он выполняет запрос только один раз.Так что я бы получил только строку «0,« а »».

Не появляется никаких сообщений об ошибках, просто таблица не обновляется двумя другими значениями.Однако, как ни странно, я могу обойти эту проблему, используя несколько запросов, например так:

ID = 0
values = ['a', 'b', 'c']
for x in values:
   database.execute("INSERT INTO table (ID) VALUES (:ID)", ID = ID)
   database.execute("INSERT INTO table (value) VALUES (:value)", value = x)
   ID += 1

Хотя это обновляет мой код, этот метод становится все более утомительным, так как я добавляю столбцы в свою таблицу дальше по линии.Кто-нибудь знает, почему первый фрагмент кода не работает, а второй работает?

1 Ответ

0 голосов
/ 27 января 2019

Метод execute принимает массив в качестве второго параметра.

execute (sql [, параметры])

Выполненияоператор SQL.Оператор SQL может быть параметризован (т. Е. Заполнители вместо литералов SQL).Модуль sqlite3 поддерживает два вида заполнителей: вопросительные знаки (стиль qmark) и именованные заполнители (именованный стиль).

Это должно работать:

database.execute("INSERT INTO table (ID, value) VALUES (:ID, :value)", [ID , x])

Возможно, вы захотите исследовать executemany, находясь в документе.

Из того же документа:

commit ()

Этот метод фиксирует текущую транзакцию.Если вы не вызываете этот метод, все, что вы сделали со времени последнего вызова commit (), не будет видно из других соединений с базой данных.Если вам интересно, почему вы не видите данные, которые вы записали в базу данных, убедитесь, что вы не забыли вызвать этот метод.

Возможно, вы захотите исследовать executemany, пока выВы в док.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...