Как добавить сразу нескольо строк в БД sqlite Python
Как сделать что бы из списка в колонку 'title' можно было добавить сразу несколько строк с записями из списка (в каждой строке по одному элементу списка) ? Первый раз работаю с БД на Python.
import sqlite3
conn = sqlite3.connect('mydb.db')
c = conn.cursor()
title = ['Вова', 'Дима', 'Илья']
c.executemany("INSERT INTO Article(title) VALUES (?)", (title))
conn.commit()
conn.close()
таблица Article столбец title
Ответы (1 шт):
Не знаю получилось ли у вас исполнить свой код после моего комментария, но решил дополнить свой ответ и оформить в виде решения.
Ваш отрывок кода открывает уже готовую базу данных. После этого вы пытаетесь вы полнить запрос к БД с помощью метода executemany(). Но проблема в следующем. executemany проходит по вашему списку, берет первый элемент и пытается распаковать его (values (?)), а для этого этот элемент должен быть списком, кортежем или словарем. Здесь же у вас обычные строки. отсюда первое исправление title = ['Вова', 'Дима', 'Илья'] => title = [['Вова'], ['Дима'], ['Илья']]
После этого код работает, при наличии созданной базы данных, с таблицей. Для полной картины выкладываю код с созданием таблицы.
import sqlite3
conn = sqlite3.connect('mydb.db')
c = conn.cursor()
# Создание таблицы Article с полями articleid (целое число заполняется автоматически, уникально) и title (текст)
c.execute("""CREATE TABLE IF NOT EXISTS Article(
articleid INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT);
""")
conn.commit()
title = [['Вова'], ['Дима'], ['Илья']]
c.executemany("INSERT INTO Article(title) VALUES (?)", (title))
conn.commit()
# Попробуем вывести содержимое БД
res = c.execute("SELECT * FROM Article")
print(res.fetchall())
# [(1, 'Вова'), (2, 'Дима'), (3, 'Илья')]
conn.close()
Более подробно о работе с sqlite можно почитать здесь