В этом уроке мы рассмотрим, как Python взаимодействует с базами данных, используя SQLite — легковесную встраиваемую реляционную базу данных. Мы изучим, как создавать базы данных, таблицы, выполнять операции вставки, выборки, обновления и удаления данных.
Теоретическая часть
Введение в SQLite
SQLite — это реляционная база данных, которая не требует отдельного серверного процесса и позволяет хранить всю базу данных в одном файле. Она поддерживает большинство операций SQL и доступна по умолчанию в Python через модуль sqlite3
.
Работа с базами данных
Для работы с базой данных в Python сначала создается соединение с базой данных, затем создаются объекты курсора, с помощью которых выполняются SQL-запросы. После выполнения запросов необходимо сохранить изменения и закрыть соединение.
Примеры кода
# Пример создания таблицы и вставки данных в SQLite
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# Создание таблицы
c.execute('''CREATE TABLE IF NOT EXISTS stocks
(date text, trans text, symbol text, qty real, price real)''')
# Вставка строки данных
c.execute("INSERT INTO stocks VALUES ('2020-01-05','BUY','RHAT',100,35.14)")
conn.commit()
conn.close()
Практические задания
1. Создайте базу данных для книжного магазина, которая включает таблицы для книг, авторов и жанров. Напишите функции для добавления новых книг и поиска книг по автору.
2. Разработайте небольшое приложение для ведения списка задач (todo list), используя SQLite для хранения данных. Реализуйте функции для добавления задачи, отметки задачи как выполненной и вывода списка текущих задач.
Решение задания
# Пример для книжного магазина
# Создание таблиц и функций для добавления и поиска опущены для краткости
# Пример для todo list
# Создание таблицы задач
c.execute('''CREATE TABLE IF NOT EXISTS tasks
(id INTEGER PRIMARY KEY, task text, done boolean)''')
# Добавление новой задачи
def add_task(task):
c.execute("INSERT INTO tasks (task, done) VALUES (?, ?)", (task, False))
conn.commit()
# Отметить задачу как выполненную
def mark_done(task_id):
c.execute("UPDATE tasks SET done = ? WHERE id = ?", (True, task_id))
conn.commit()
# Получить список текущих задач
def get_tasks():
c.execute("SELECT * FROM tasks WHERE done = ?", (False,))
return c.fetchall()