🏋️ Раздел тренировки
В этом разделе вы пошагово соберёте первую часть онлайн-магазина книг: от создания базы данных до рабочего меню с регистрацией и входом.
📂 Подготовка проекта
- Создайте папку урока, например
python-fundamentals-practice/lesson-85/. - Установите PyMySQL:
pip install pymysql. - Создайте файл
books.csvс несколькими строками в форматеtitle,author,price,stock.
Задание 1. Создание базы данных
Условие: напишите скрипт, который подключается к MySQL и создаёт базу данных bookstore. После создания выполните проверку через SHOW DATABASES и выведите сообщение Database 'bookstore' created or already exists., если база есть в списке.
Что должно получиться: в терминале появляется подтверждение, что база данных создана или уже существует.
Подсказка: используйте CREATE DATABASE IF NOT EXISTS, чтобы скрипт не падал при повторном запуске.
Задание 2. Создание таблиц
Условие: расширьте предыдущий скрипт. После создания базы создайте в ней таблицы books и users со следующими столбцами:
books:id,title,author,price,stock.users:id,username,password,balance.
После создания таблиц выведите их список в формате:
Tables in 'bookstore':
- books
- users
Подсказка: не забудьте выполнить USE bookstore перед созданием таблиц.
Задание 3. Загрузка книг из файла
Условие: напишите функцию load_books_from_file(filename, connection), которая:
- читает файл построчно;
- разбивает каждую строку по запятой на 4 части;
- если книга с таким
titleиauthorуже есть — увеличиваетstock; - если такой книги нет — добавляет новую запись;
- по завершении выводит количество обработанных строк, например
2 books loaded.
Что должно получиться: после запуска функции в таблице books появляются книги из файла, повторный запуск увеличивает количество существующих книг.
Подсказка: используйте параметризованные запросы SELECT ... WHERE title = %s AND author = %s.
Задание 4. Регистрация клиента
Условие: напишите функцию register_user(connection), которая запрашивает у пользователя логин, пароль и начальный баланс. Если логин уже существует — выводит Username already exists. и завершает работу. Иначе — добавляет пользователя и выводит Registration successful.
Что должно получиться: программа не позволяет зарегистрировать двух пользователей с одинаковым логином.
Подсказка: проверьте баланс на корректность через try/except ValueError.
Задание 5. Вход в аккаунт и подменю
Условие: напишите функцию try_login(connection), которая возвращает user_id при успешном вводе логина и пароля, иначе None. После успешного входа запускайте подменю user_menu(connection, user_id) с пунктами «Показать книги» и «Выйти».
Что должно получиться: после входа пользователь попадает в своё меню, после выхода из него — обратно в главное.
Подсказка: храните user_id в переменной и передавайте его в подменю.
Задание 6 (★ продвинутое). Поиск книг по названию
Условие: добавьте в подменю пользователя пункт «Найти книгу». Пользователь вводит ключевое слово, программа выводит все книги, в названии которых оно встречается. Используйте оператор LIKE и параметризованный запрос.
Что должно получиться: при вводе Python выводятся книги с названиями вроде Python Crash Course и Learning Python.
Подсказка: шаблон для LIKE формируйте так: pattern = f"%{keyword}%", а в SQL используйте title LIKE %s.
Задание 7 (★ продвинутое). Переменные окружения
Условие: вынесите параметры подключения к базе данных в переменные окружения и загрузите их через os.getenv или библиотеку python-dotenv.
Что должно получиться: в коде не остаётся логинов и паролей; для запуска нужен файл .env или заданные переменные окружения.
Подсказка: создайте файл .env и добавьте его в .gitignore.