#python #django #sqlite
#питон #django #sqlite #python
Вопрос:
Как мне использовать подготовленный оператор для вставки НЕСКОЛЬКИХ записей в SQLite с использованием Python / Django?
Ответ №1:
Официальная документация библиотеки Python: Объекты курсора
Библиотеки SQLite Python не имеют готовых объектов statement, но они позволяют вам использовать параметризованные запросы и предоставлять более одного набора параметров.
Редактировать: пример executemany
по запросу:
values_to_insert = [(1,"foo"), (2, "bar"), (3, "baz")]
cursor.executemany("""
INSERT INTO some_table ('item_num', 'item_name')
VALUES (?, ?)""", values_to_insert)
Комментарии:
1. @Amber: спасибо за ваш ответ. Я пропустил один важный момент, т. Е. это была вставка НЕСКОЛЬКИХ записей.. «execute()» позволяет выполнить только один запрос.. у меня это не сработает 🙂
2. @mahendraliya вот почему
.executemany()
существует: docs.python.org/library/sqlite3.html#sqlite3.Cursor.executemany3. @Amber: я также прошел через executemany(), но, к сожалению, должен сказать, что я совершенно новичок как в python, так и в sqlite. Я сомневаюсь, что если у меня есть, скажем, список имен файлов, который я подготовил путем добавления значений внутри объекта list, то как я могу использовать его с executeMany .. это похоже на простую передачу объекта list (скажем, FileList) в executemany()?.. Любой фрагмент кода был бы действительно оценен.. Спасибо.
4. @mahendraliya — добавлен пример
executemany
использования, как и было запрошено.5. @Amber: ваш код сработал для меня очень хорошо .. НО я получаю ошибки при попытке запустить executemany() для значений, содержащих неанглийские символы.. ранее это работало с executescript().. Я не знаю, почему это не удается с executemany() ..? У вас есть какие-нибудь идеи?
Ответ №2:
Вы можете использовать executemany() и передать объект iterator, например, для вставки 100 целых чисел и их квадратов:
def my_iter(x):
for i in range(x):
yield i, i*i
cursor.executemany("INSERT INTO my_table VALUES (?, ?)", my_iter(100))