🏠 Обзорный мини-проект
Summary session не содержит отдельного задания в LMS. Выполните обзорный мини-проект, чтобы закрепить подключение к MySQL, выполнение запросов, работу с DictCursor и транзакции.
Задание 1. Создание базы данных
Напишите программу, которая:
- подключается к серверу MySQL без указания базы данных;
- создаёт базу данных
notes_app_<your_group>_<your_full_name>; - выбирает созданную базу через
USE; - выводит сообщение о результате.
Пример вывода:
Database 'notes_app' created or already exists.
Задание 2. Создание таблицы и добавление заметки
Продолжите предыдущую программу:
- создайте таблицу
notesс полями:id,title,content; - вставьте одну заметку в таблицу;
- выполните
commit()после вставки; - выведите сообщение
Note added: <title>.
Пример вывода:
Note added: Shopping list
Задание 3. Вывод заметок через DictCursor
Модифицируйте программу так, чтобы:
- подключение использовало
DictCursor; - после добавления заметки выводились все заметки из таблицы;
- для каждой заметки печатались
id,titleиcontentв читаемом виде.
Пример вывода:
Note added: Shopping list
All notes:
1. Shopping list — Buy milk, bread and eggs
Задание 4. Обновление и удаление в транзакции
Добавьте в программу возможность обновлять и удалять заметки в рамках транзакции:
- попросите пользователя выбрать действие:
updateилиdelete; - для обновления измените
contentзаметки по еёid; - для удаления удалите заметку по её
id; - оберните операцию в
try/exceptи используйтеcommit()при успехе илиrollback()при ошибке.
Пример вывода:
Choose action (update/delete): update
Enter note id: 1
Enter new content: Buy milk, bread, eggs and cheese
Note updated.
All notes:
1. Shopping list — Buy milk, bread, eggs and cheese
Задание 5. Массовое добавление заметок
Добавьте в программу возможность массово вставлять заметки через executemany(). Подготовьте список из трёх заметок и добавьте их одним вызовом.
Пример итоговой программы
import pymysql
from pymysql.cursors import DictCursor
# Замените на свои реальные данные подключения
admin_config = {
"host": "ich-edit.edu.itcareerhub.de",
"user": "ich1",
"password": "ich1_password_ilovedbs",
}
group = "pyfund"
full_name = "ivan_ivanov"
database_name = f"notes_app_{group}_{full_name}"
def create_database():
with pymysql.connect(**admin_config) as connection:
with connection.cursor() as cursor:
cursor.execute(f"CREATE DATABASE IF NOT EXISTS {database_name}")
cursor.execute(f"USE {database_name}")
cursor.execute("""
CREATE TABLE IF NOT EXISTS notes (
id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(200),
content TEXT
)
""")
print(f"Database '{database_name}' created or already exists.")
def add_note(title, content):
db_config = {**admin_config, "database": database_name, "cursorclass": DictCursor}
with pymysql.connect(**db_config) as connection:
with connection.cursor() as cursor:
cursor.execute(
"INSERT INTO notes (title, content) VALUES (%s, %s)",
(title, content)
)
connection.commit()
print(f"Note added: {title}")
def list_notes():
db_config = {**admin_config, "database": database_name, "cursorclass": DictCursor}
with pymysql.connect(**db_config) as connection:
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM notes ORDER BY id")
notes = cursor.fetchall()
print("\nAll notes:")
if not notes:
print("No notes found.")
for note in notes:
print(f"{note['id']}. {note['title']} — {note['content']}")
def update_or_delete():
db_config = {**admin_config, "database": database_name, "cursorclass": DictCursor}
action = input("Choose action (update/delete): ").strip().lower()
note_id = int(input("Enter note id: "))
with pymysql.connect(**db_config) as connection:
try:
with connection.cursor() as cursor:
if action == "update":
new_content = input("Enter new content: ")
cursor.execute(
"UPDATE notes SET content = %s WHERE id = %s",
(new_content, note_id)
)
print("Note updated.")
elif action == "delete":
cursor.execute("DELETE FROM notes WHERE id = %s", (note_id,))
print("Note deleted.")
else:
print("Unknown action.")
return
connection.commit()
except Exception as e:
connection.rollback()
print("Operation failed:", e)
def add_many_notes(notes):
db_config = {**admin_config, "database": database_name}
with pymysql.connect(**db_config) as connection:
with connection.cursor() as cursor:
cursor.executemany(
"INSERT INTO notes (title, content) VALUES (%s, %s)",
notes
)
connection.commit()
print(f"Added {len(notes)} notes.")
if __name__ == "__main__":
create_database()
add_note("Shopping list", "Buy milk, bread and eggs")
list_notes()
update_or_delete()
list_notes()
add_many_notes([
("Work", "Finish the report"),
("Study", "Review MySQL transactions"),
("Travel", "Book train tickets"),
])
list_notes()
Проверить по документации: в реальных проектах пароли и учётные данные не хранятся прямо в коде. Используйте переменные окружения или файлы конфигурации.
Что проверить
- Программа создаёт базу данных и таблицу без ошибок.
- Заметки добавляются, выводятся через
DictCursor. - Обновление и удаление работают в транзакции с
commit()иrollback(). - Массовое добавление выполняется через
executemany(). - Все соединения и курсоры закрываются через
with.