📋 Формулировка задания
Исходное задание из LMS:
Онлайн-магазин книг. Часть 1.
- Создайте новую базу данных под названием
bookstore. После создания выполните проверку: если база данных успешно создана (или уже существует), выведите сообщениеDatabase 'bookstore' created or already exists. - Расширьте предыдущую программу: после создания базы данных
bookstoreсоздайте в ней две таблицы:books— для хранения информации о книгах, иusers— для регистрации клиентов. После создания таблиц выведите список всех таблиц в текущей базе.
🔧 Шаг 0. Подготовка окружения
Перед началом работы над любым заданием курса нужно настроить окружение. Эти шаги одинаковы для всех уроков.
.gitignore, единая история, легко переключаться между уроками.
Создайте (или откройте) рабочую папку
В VS Code нажмите Ctrl+K Ctrl+O → выберите или создайте папку python-fundamentals-practice. Это будет корень вашего учебного репозитория.
# Или в терминале VS Code (Ctrl + `):
mkdir python-fundamentals-practice
cd python-fundamentals-practice
Инициализируйте Git-репозиторий (один раз)
Если папка ещё не является git-репозиторием:
git init
# Создайте базовые файлы
echo "# Python Fundamentals — Практические работы" > README.md
echo "venv/" > .gitignore
echo "__pycache__/" >> .gitignore
echo "*.pyc" >> .gitignore
echo ".env" >> .gitignore
git add README.md .gitignore
git commit -m "init: базовая структура репозитория"
Создайте папку для текущего урока
# Структура: lesson-XX/
mkdir -p lesson-85
cd lesson-85
Создайте виртуальное окружение (venv)
# Windows (PowerShell / CMD)
python -m venv venv
venv\Scripts\activate
# Mac / Linux
python3 -m venv venv
source venv/bin/activate
После активации в начале строки терминала появится (venv). Все дальнейшие команды выполняйте внутри venv.
Установите зависимости для урока
pip install pymysql python-dotenv
# Сохраните зависимости
pip freeze > requirements.txt
Создайте ветку для задания
# Вернитесь в корень репозитория
cd ../..
# Создайте и переключитесь на ветку
git checkout -b lesson/85-practice-21
# Отправьте ветку на удалённый репозиторий (если настроен)
git push -u origin lesson/85-practice-21
Именование веток: lesson/XX-краткое-название. Это позволяет легко находить нужный урок.
🛠️ Шаги выполнения задания
Теперь, когда окружение готово, приступайте к решению.
Шаг 1: создайте файл init_bookstore.py
В папке lesson-85 создайте файл и подключитесь к MySQL через PyMySQL.
import pymysql
config = {
"host": "ich-edit.edu.itcareerhub.de",
"user": "ich1",
"password": "ich1_password_ilovedbs",
}
db_name = "bookstore"
Шаг 2: создайте базу данных и проверьте результат
Выполните CREATE DATABASE IF NOT EXISTS bookstore, затем SHOW DATABASES и проверьте, есть ли bookstore в списке.
with pymysql.connect(**config) as connection:
with connection.cursor() as cursor:
cursor.execute(f"CREATE DATABASE IF NOT EXISTS {db_name}")
cursor.execute("SHOW DATABASES")
databases = [row[0] for row in cursor]
if db_name in databases:
print(f"Database '{db_name}' created or already exists.")
else:
print("Something went wrong. Database not found.")
Шаг 3: создайте таблицы books и users
После создания базы переключитесь на неё через USE bookstore и создайте таблицы.
books_query = """
CREATE TABLE IF NOT EXISTS books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
author VARCHAR(100),
price DECIMAL(10, 2),
stock INT CHECK (stock >= 0)
)
"""
users_query = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100),
password VARCHAR(100),
balance DECIMAL(10, 2) CHECK (balance >= 0)
)
"""
with pymysql.connect(**config) as connection:
with connection.cursor() as cursor:
cursor.execute(f"CREATE DATABASE IF NOT EXISTS {db_name}")
cursor.execute(f"USE {db_name}")
cursor.execute(books_query)
cursor.execute(users_query)
cursor.execute("SHOW TABLES")
tables = [row[0] for row in cursor]
print(f"Tables in '{db_name}':")
for table in tables:
print(f"- {table}")
✅ Полное решение
Ниже приведено полное решение задания. Совет: попробуйте выполнить самостоятельно, прежде чем смотреть ответ.
import pymysql
config = {
"host": "ich-edit.edu.itcareerhub.de",
"user": "ich1",
"password": "ich1_password_ilovedbs",
}
db_name = "bookstore"
books_query = """
CREATE TABLE IF NOT EXISTS books (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
author VARCHAR(100),
price DECIMAL(10, 2),
stock INT CHECK (stock >= 0)
)
"""
users_query = """
CREATE TABLE IF NOT EXISTS users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(100),
password VARCHAR(100),
balance DECIMAL(10, 2) CHECK (balance >= 0)
)
"""
with pymysql.connect(**config) as connection:
with connection.cursor() as cursor:
# Шаг 1 — создать базу данных
cursor.execute(f"CREATE DATABASE IF NOT EXISTS {db_name}")
cursor.execute("SHOW DATABASES")
databases = [row[0] for row in cursor]
if db_name in databases:
print(f"Database '{db_name}' created or already exists.")
else:
print("Something went wrong. Database not found.")
# Шаг 2 — создать таблицы
cursor.execute(f"USE {db_name}")
cursor.execute(books_query)
cursor.execute(users_query)
# Шаг 3 — вывести список таблиц
cursor.execute("SHOW TABLES")
tables = [row[0] for row in cursor]
print(f"Tables in '{db_name}':")
for table in tables:
print(f"- {table}")
🧪 Как проверить решение
- Активируйте venv:
venv\Scripts\activate(Windows) илиsource venv/bin/activate(Mac/Linux). - Запустите скрипт:
python init_bookstore.py. - Проверьте вывод в терминале:
Database 'bookstore' created or already exists. Tables in 'bookstore': - books - users - Убедитесь, что повторный запуск не вызывает ошибок благодаря
IF NOT EXISTS.
🐛 Отладка в VS Code
Если что-то не работает:
- Проверьте, что PyMySQL установлен:
pip show pymysql. - Убедитесь, что параметры подключения (
host,user,password) верны. - Если возникает
OperationalError— проверьте доступность сервера MySQL и правильность логина/пароля. - Если таблицы не создаются — убедитесь, что выполнили
USE bookstoreпередCREATE TABLE. - Используйте точки останова (breakpoints) в VS Code, чтобы пошагово пройти выполнение скрипта.