- Как добавлять и читать данные в SQLite с помощью Python
- Подключить приложение Python к базе данных SQLite
- Вставить данные в базу данных SQLite с помощью Python
- Чтение данных в базе данных SQLite с помощью Python.
- Вставить несколько данных в базу данных с помощью Python
- Вставка данных в таблицу SQLite
- Пример вставки строки в таблицу SQLite
- Разбор кода
- Использование переменных в запросе INSERT
- Вставка нескольких строк с помощью executemany()
Как добавлять и читать данные в SQLite с помощью Python
Python поставляется со встроенным пакетом sqlite3, который мы можем импортировать в наш проект и использовать его API для подключения к базе данных SQLite и простого управления базой данных.
Подключить приложение Python к базе данных SQLite
Для соединения с базой данных SQLite используйте функцию connect().
import sqlite3 connection = sqlite3.connect('shows.db')
Если файл shows.db отсутствует, он будет создан и подключен. Если он есть, то он будет подключен.
Чтобы создать таблицу в базе данных, нам нужно использовать объект курсора. Чтобы создать объект курсора, используйте метод connection.cursor() .
Теперь создайте таблицу базы данных с несколькими столбцами.
cursor.execute('''CREATE TABLE IF NOT EXISTS Shows (Title TEXT, Director TEXT, Year INT)''')
В этом коде мы написали команду, которая создаст таблицу с ее именами столбцов и типами данных.
Вставить данные в базу данных SQLite с помощью Python
Чтобы добавить данные в SQLite с помощью Python, мы используем запрос INSERT INTO TABLE . Мы выполним запрос INSERT с помощью курсора.
cursor.execute("INSERT INTO Shows VALUES ('Stranger Things', 'Shawn Levy', 2016)")
В этом коде мы написали запрос, и соответствующие значения столбцов — Stranger Things, Shawn Levy, 2016.
Чтение данных в базе данных SQLite с помощью Python.
Чтобы проверить, правильно ли вставлены данные в базу данных SQLite с помощью Python, используйте запрос SELECT и распечатайте строку с помощью метода cursor.fetchone() .
cursor.execute("SELECT * FROM Shows") print(cursor.fetchone())
Последним шагом будет фиксация этих изменений для сохранения в базе данных и закрытие соединения.
Итак, наш полный код выглядит следующим образом.
import sqlite3 connection = sqlite3.connect('shows.db') cursor = connection.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS Shows (Title TEXT, Director TEXT, Year INT)''') cursor.execute( "INSERT INTO Shows VALUES ('Stranger Things', 'Shawn Levy', 2016)") cursor.execute("SELECT * FROM Shows") print(cursor.fetchone()) connection.commit() connection.close()
Запустите указанный выше файл в терминале.
python3 app.py ('Stranger Things', 'Shawn Levy', 2016)
Вы можете видеть, что мы возвращаем нашу строку, что означает, что данные успешно сохранены в базе данных SQLite.
Вставить несколько данных в базу данных с помощью Python
Чтобы вставить несколько строк в базу данных, сначала создайте данные, которые вы хотите вставить, а затем используйте запрос, чтобы добавить все данные за один раз.
moreShows = [('Money Heist', 'Alex Rodrigo', 2017), ('Dark', 'Baran bo Odar', 2017), ('1992 Scam', 'Hansal Mehta', 2020)]
Здесь мы создали кортеж Python, содержащий каждую строку в таблице Shows .
Чтобы добавить несколько данных в базу данных SQLite с помощью Python, используйте метод cursor.executemany() .
cursor.executemany("INSERT INTO Shows VALUES (?, ?, ?)", moreShows)
Здесь он будет брать все кортежи один за другим и вставлять их в базу данных с соответствующими полями.
Теперь давайте извлечем все данные из базы данных.
Чтобы получить все записи из базы данных SQLite, используйте метод cursor.fetchall() .
Наш полный код, который добавляет несколько записей и показывает все записи пользователю:
import sqlite3 connection = sqlite3.connect('shows.db') cursor = connection.cursor() cursor.execute('''CREATE TABLE IF NOT EXISTS Shows (Title TEXT, Director TEXT, Year INT)''') moreShows = [('Money Heist', 'Alex Rodrigo', 2017), ('Dark', 'Baran bo Odar', 2017), ('1992 Scam', 'Hansal Mehta', 2020)] cursor.executemany("INSERT INTO Shows VALUES (?, ?, ?)", moreShows) records = cursor.execute("SELECT * FROM Shows") print(cursor.fetchall()) connection.commit() connection.close()
Запустите файл и посмотрите результат.
python3 app.py [('Stranger Things', 'Shawn Levy', 2016), ('Money Heist', 'Alex Rodrigo', 2017), ('Dark', 'Baran bo Odar', 2017), ('1992 Scam', 'Hansal Mehta', 2020)]
Здесь вы можете видеть, что мы уже добавили строку Stranger Things в первом примере, сохраненную в базе данных. Вот почему он появляется во всех записях.
Это все для добавления и чтения данных в SQLite с использованием Python.
Вставка данных в таблицу SQLite
В этом материале рассматривается, как выполнять операцию Insert в SQLite из Python для добавления новых строк в таблицу:
- Добавление одной или нескольких строк в таблицу SQLite.
- Добавление целых чисел, строк, чисел с плавающей точкой, с двойной точностью, а также значений datetime в таблицу SQLite.
- Использование запросов с параметрами для добавления переменных Python в качестве динамических данных в таблицу.
Перед выполнением следующих программ нужно убедиться, что вам известны название таблицы, а также информация о ее колонках. В этом примере будет использоваться таблица sqlitedb_developers .
Пример вставки строки в таблицу SQLite
Сейчас таблица sqlitedb_developers пустая, и ее нужно заполнить. Для этого необходимо выполнить следующие шаги:
- Установить SQLite-соединение из Python.
- Создать объект Cursor с помощью объекта соединения.
- Создать INSERT-запрос. Для этого нужно знать таблицу и подробности о колонках.
- Выполнить запрос с помощью cursor.execute() .
- После успешного завершения нужно не забыть выполнить коммит изменений в базу данных.
- Также важно не забыть перехватить исключения SQLite.
- Наконец, следует проверить результат, вернув данные из таблицы.
import sqlite3
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_insert_query = """INSERT INTO sqlitedb_developers
(id, name, email, joining_date, salary)
VALUES
(1, 'Oleg', 'oleg04@gmail.com', '2020-11-29', 8100);"""
count = cursor.execute(sqlite_insert_query)
sqlite_connection.commit()
print("Запись успешно вставлена в таблицу sqlitedb_developers ", cursor.rowcount)
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")Подключен к SQLite Запись успешно вставлена в таблицу sqlitedb_developers 1 Соединение с SQLite закрыто
Теперь можно проверить результат, посмотрев таблицу через программу DB Browser.
Разбор кода
- import sqlite3 :
- На этой строке модуль sqlite3 импортируется в программу.
- С помощью классов и методов из модуля можно взаимодействовать с базой данных SQLite.
- sqlite3.connect() и connection.cursor() :
- С помощью метода sqlite3.connect() устанавливается соединение с базой данных SQLite из Python.
- Дальше используется connection.cursor() для получения объекта cursor из объекта соединения.
- После этого готовится INSERT-запрос для вставки данных в таблицу. В нем указываются названия колонок и их значения. Всего в таблице 5 колонок.
- cursor.execute() :
- С помощью метода execute() объекта сursor выполняется запрос INSERT.
- Чтобы сохранить изменения в базе, нужно использовать connection.commit() .
- А с помощью cursor.rowcount можно узнать количество отредактированных строк.
И в блоке finally после завершения операции закрываются объекты cursor и соединение.
Использование переменных в запросе INSERT
Иногда в колонку таблицы нужно вставить значение переменной Python. Этой переменной может быть что угодно: целое число, строка, число с плавающей точкой, datetime . Например, при регистрации пользователь вводит свои данные. Их и можно взять вставить в таблицу SQLite.
Для этого есть запрос с параметрами. Он позволяет использовать переменные Python на месте заполнителей (?) в запросе. Пример:
import sqlite3
def insert_varible_into_table(dev_id, name, email, join_date, salary):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_insert_with_param = """INSERT INTO sqlitedb_developers
(id, name, email, joining_date, salary)
VALUES (?, ?, ?, ?, ?);"""
data_tuple = (dev_id, name, email, join_date, salary)
cursor.execute(sqlite_insert_with_param, data_tuple)
sqlite_connection.commit()
print("Переменные Python успешно вставлены в таблицу sqlitedb_developers")
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
insert_varible_into_table(2, 'Viktoria', 's_dom34@gmail.com', '2020-11-19', 6000)
insert_varible_into_table(3, 'Valentin', 'exp3@gmail.com', '2020-11-23', 6500)Вывод: таблица sqlitedb_developers после вставки переменной Python в качестве значения колонки.
Подключен к SQLite Переменные Python успешно вставлены в таблицу sqlitedb_developers Соединение с SQLite закрыто Подключен к SQLite Переменные Python успешно вставлены в таблицу sqlitedb_developers Соединение с SQLite закрыто
Проверить результат можно, получив данные из таблицы.
Вставка нескольких строк с помощью executemany()
В предыдущем примере для вставки одной записи в таблицу использовался метод execute() объекта cursor , но иногда требуется вставить несколько строчек.
Например, при чтении файла, например, CSV, может потребоваться добавить все записи из него в таблицу SQLite. Вместе выполнения запроса INSERT для каждой записи, можно выполнить все операции в один запрос. Добавить несколько записей в таблицу SQLite можно с помощью метода executemany() объекта cursor .
Этот метод принимает два аргумента: запрос SQL и список записей.
import sqlite3
def insert_multiple_records(records):
try:
sqlite_connection = sqlite3.connect('sqlite_python.db')
cursor = sqlite_connection.cursor()
print("Подключен к SQLite")
sqlite_insert_query = """INSERT INTO sqlitedb_developers
(id, name, email, joining_date, salary)
VALUES (?, ?, ?, ?, ?);"""
cursor.executemany(sqlite_insert_query, records)
sqlite_connection.commit()
print("Записи успешно вставлены в таблицу sqlitedb_developers", cursor.rowcount)
sqlite_connection.commit()
cursor.close()
except sqlite3.Error as error:
print("Ошибка при работе с SQLite", error)
finally:
if sqlite_connection:
sqlite_connection.close()
print("Соединение с SQLite закрыто")
records_to_insert = [(4, 'Jaroslav', 'idebylos@gmail.com', '2020-11-14', 8500),
(5, 'Timofei', 'ullegyddomm@gmail.com', '2020-11-15',6600),
(6, 'Nikita', 'aqillysso@gmail.com', '2020-11-27', 7400)]
insert_multiple_records(records_to_insert)Снова проверка с помощью получения данных из таблицы.
Подключен к SQLite Записи успешно вставлены в таблицу sqlitedb_developers 3 Соединение с SQLite закрыто
Разберем последний пример:
- После подключения к базе данных подготавливается список записей для вставки в таблицу. Каждая из них — это всего лишь строка.
- Инструкция SQLite INSERT содержит запрос с параметрами, где на месте каждого значения стоит вопросительный знак.
- Дальше с помощью cursor.executemany(sqlite_insert_query, recordList) в таблицу вставляются несколько записей.
- Чтобы узнать количество вставленных строк используется метод cursor.rowcount . Наконец, нужно не забыть сохранить изменения в базе.