Практика: создать таблицу, вставить через executemany(), обновить цены через UPDATE.
✅ Ответы на задания для закрепления
1
Почему может быть полезно не указывать базу данных при подключении?
Ответ: b, d
Неуказание базы позволяет создавать или удалять базы данных, а также выбирать нужную базу позже вручную через USE. Время соединения и скорость выборки от этого не зависят.
2
Что произойдёт, если выполнить запрос к таблице без выбора базы данных?
Ответ: c
Если база не выбрана, MySQL вернёт ошибку No database selected.
3
После какого действия нужно вызывать commit()?
Ответ: b, c, d
commit() нужен после изменяющих запросов: INSERT, UPDATE, DELETE. После SELECT коммит не требуется, потому что данные не изменяются.
4
Что делает метод executemany()?
Ответ: c
executemany() позволяет выполнять один SQL-запрос с разными данными. Вторым аргументом передаётся список кортежей.
5
Что произойдёт, если после INSERT не вызвать commit()?
Ответ: c
Изменения останутся во временном хранилище транзакции и будут потеряны после закрытия соединения.
🛠️ Решения практических задач
6
Добавление товаров в таблицу
Файл:practice_task1.py
from pymysql.cursors import DictCursor
import pymysql
config = {
"host": "ich-edit.edu.itcareerhub.de",
"user": "ich1",
"password": "ich1_password_ilovedbs",
}
with pymysql.connect(**config, cursorclass=DictCursor) as connection:
with connection.cursor() as cursor:
cursor.execute("CREATE DATABASE IF NOT EXISTS market")
cursor.execute("USE market")
cursor.execute("""
CREATE TABLE IF NOT EXISTS products (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
price DECIMAL(10, 2)
)
""")
products = [
("Notebook", 10.00),
("Pencil", 1.00),
("Bag", 25.00)
]
cursor.executemany(
"INSERT INTO products (name, price) VALUES (%s, %s)",
products
)
connection.commit()
print("Products added:")
cursor.execute("SELECT id, name, price FROM products")
for row in cursor.fetchall():
print(f"{row['id']}. {row['name']} — ${row['price']:.2f}")
Разбор:
Подключаемся без указания базы, потому что сначала создаём её.
Используем DictCursor, чтобы удобно обращаться к row["id"], row["name"], row["price"].
executemany() вставляет все товары одним вызовом.
commit() сохраняет изменения в базе.
7
Массовое повышение цен
Файл:practice_task2.py
from pymysql.cursors import DictCursor
import pymysql
config = {
"host": "ich-edit.edu.itcareerhub.de",
"user": "ich1",
"password": "ich1_password_ilovedbs",
}
with pymysql.connect(**config, cursorclass=DictCursor) as connection:
with connection.cursor() as cursor:
cursor.execute("USE market")
cursor.execute("UPDATE products SET price = price * 1.2")
connection.commit()
print("Prices updated.\n\nProducts after update:")
cursor.execute("SELECT id, name, price FROM products")
for row in cursor.fetchall():
print(f"{row['id']}. {row['name']} — ${row['price']:.2f}")
Разбор:
Один запрос UPDATE products SET price = price * 1.2 увеличивает все цены на 20%.