✅ Решения заданий

⚡ Кратко

Сначала решите задачу самостоятельно. Затем сравните ход решения, найдите отличие и повторите проблемный фрагмент без подсказки.

⚠️ Рекомендация: попробуйте решить задания самостоятельно, прежде чем смотреть ответы. Решения — это последняя инстанция, когда собственные попытки исчерпаны.

Решение вопроса 1

Правильные пары:

  • pymysql.connect(...)c (подключает Python к базе данных)
  • connection.cursor()b (создаёт объект для отправки SQL-запросов)
  • cursor.execute(...)d (выполняет SQL-запрос)
  • connection.close()a (закрывает соединение с базой данных)

Логика: сначала создаётся соединение, затем из него получают курсор, через курсор выполняют запрос, а в конце освобождают ресурсы.

Решение вопроса 2

Правильный порядок:

  1. b — подключиться к базе (pymysql.connect(...))
  2. a — создать курсор (connection.cursor())
  3. c — выполнить запрос (cursor.execute(...))
  4. e — закрыть курсор (cursor.close())
  5. d — закрыть соединение (connection.close())

Логика: нельзя закрыть соединение раньше курсора, потому что курсор привязан к соединению.

Решение задачи 1. Версия MySQL

import pymysql


def get_mysql_version(config):
    with pymysql.connect(**config) as connection:
        with connection.cursor() as cursor:
            cursor.execute("SELECT VERSION()")
            version = cursor.fetchone()
            return version[0]


if __name__ == "__main__":
    db_config = {
        "host": "localhost",
        "user": "root",
        "password": "secret",
    }
    print("Версия MySQL:", get_mysql_version(db_config))

Логика: используем SELECT VERSION() и fetchone(), чтобы получить одну строку с версией сервера. Контекстный менеджер with автоматически закрывает ресурсы.

Решение задачи 2. Добавление товаров в MongoDB

from pymongo import MongoClient


def insert_sample_products(collection):
    collection.delete_many({})
    products = [
        {"name": "Pen", "price": 1.50, "stock": 100},
        {"name": "Notebook", "price": 3.99, "stock": 50},
        {"name": "Backpack", "price": 25.00, "stock": 20},
    ]
    result = collection.insert_many(products)
    return len(result.inserted_ids)


if __name__ == "__main__":
    with MongoClient("mongodb://localhost:27017") as client:
        db = client["ich_edit"]
        collection = db["products_pd_ivanov"]
        inserted = insert_sample_products(collection)
        print(f"{inserted} products inserted.")

Логика: сначала очищаем коллекцию, чтобы повторные запуски не дублировали товары. Затем вставляем список документов и печатаем количество вставленных ID.

Решение задачи 3. Увеличение цен

from pymongo import MongoClient


def update_prices(collection):
    result = collection.update_many({}, {"$mul": {"price": 1.2}})
    return result.modified_count


if __name__ == "__main__":
    with MongoClient("mongodb://localhost:27017") as client:
        db = client["ich_edit"]
        collection = db["products_pd_ivanov"]

        count = update_prices(collection)
        print(f"Prices updated for {count} products.")

        print("Updated products:")
        for product in collection.find({}, {"_id": 0, "name": 1, "price": 1}):
            print(f"- {product['name']} — ${product['price']:.2f}")

Логика: пустой фильтр {} в update_many означает «все документы». Оператор $mul умножает текущее значение price на 1.2, что эквивалентно увеличению на 20%. Для вывода используем find() с проекцией, чтобы не выводить служебное поле _id.