Урок 85. Практикум 21
⚡ Кратко: суть темы
Практикум 21 — начинаем собирать консольный онлайн-магазин книг на Python с базой данных MySQL. В этой части создаём базу bookstore, таблицы books и users, консольное меню, загрузку книг из CSV-файла, регистрацию и вход пользователя.
- Создаём БД и таблицы через
CREATE DATABASE/TABLEи проверяем результат черезSHOW. - Используем
pymysql.connect(**config)и контекстные менеджерыwithдля работы с соединением и курсором. - Загружаем книги из CSV: если книга уже есть — обновляем количество (
UPDATE), иначе — добавляем (INSERT). - Регистрируем пользователя с проверкой уникальности логина и входим в аккаунт через параметризованный
SELECT. - Параметризованные запросы
(%s, (...))защищают от SQL-инъекций — никогда не подставляйте пользовательский ввод f-строкой в SQL.
Минимальный пример:
import pymysql
config = {"host": "localhost", "user": "root", "password": "secret"}
with pymysql.connect(**config) as connection:
with connection.cursor() as cursor:
cursor.execute("CREATE DATABASE IF NOT EXISTS bookstore")
cursor.execute("SHOW DATABASES")
if "bookstore" in [row[0] for row in cursor]:
print("Database 'bookstore' created or already exists.")
Топ-3 ошибки:
- Вставка переменных в SQL через f-строки — открывает дверь SQL-инъекциям.
- Забытый
connection.commit()— изменения не сохраняются в БД. - Путаница индексов в
fetchone(): забывают, что результат — кортеж, и пишутresult[0]без проверки наNone.
📖 О чём этот урок
Этот урок — первая часть большого практического проекта: онлайн-магазин книг. Мы пошагово строим консольное приложение, которое работает с реляционной базой данных MySQL через библиотеку PyMySQL. В дальнейшем проект дополнят MongoDB для хранения поисковых запросов, покупки книг, фиксация заказов и разделение на модули.
В части 1 мы заложим фундамент: создадим базу данных bookstore, таблицы для книг и пользователей, научимся загружать книги из текстового файла, регистрировать клиентов и входить в аккаунт. Это типичный сценарий для учебных и небольших реальных приложений, где данные нужно хранить структурированно и надёжно.
Что изучим
- Создание базы данных и таблиц через SQL и PyMySQL.
- Проверку результата команд
SHOW DATABASESиSHOW TABLES. - Чтение CSV-подобных текстовых файлов и загрузку данных в БД.
- Параметризованные запросы
INSERT,SELECTиUPDATE. - Регистрацию пользователя с проверкой уникальности логина.
- Авторизацию и запуск подменю для вошедшего клиента.
- Современные практики: guard clauses, ранний возврат,
if __name__ == "__main__".
📚 Что повторить перед изучением
- ← Урок 80: MySQL и Python
- ← Урок 81: Практикум 20
- ← Урок 82: MySQL. Транзакции
- ← Урок 83: Summary session 21
- ← Урок 84: MongoDB и Python. Модули
- Функции и разделение кода на части (уроки 26–28).
- Работа с файлами и кодировка UTF-8 (уроки 38–40).
- Контекстный менеджер
withи обработка ошибок (уроки 48, 52).