Урок 81. Практикум 20: Данные о сотрудниках. Часть 2

📁 Блок: Базы данных ⏱️ Время изучения: ~90 мин 🎯 Сложность: Практикум
#for #in #with #as #enumerate #from #print

⚡ Краткий справочник

  • pymysql.connect(**config) — открыть соединение.
  • with connection.cursor() as cursor — создать курсор в контекстном менеджере.
  • cursor.execute(sql, params) — выполнить параметризованный запрос.
  • cursor.fetchall() — получить все строки результата.
  • JOIN ... ON ... — соединить таблицы.
  • ORDER BY column DESC — сортировать по убыванию.
  • enumerate(iterable, start=1) — нумеровать вывод с единицы.

Соединение и курсор

Команда / методОписаниеПример
pymysql.connect(...)Создаёт соединение с MySQLpymysql.connect(host="...", user="...", password="...", database="hr")
connection.cursor()Создаёт курсор для запросовcursor = connection.cursor()
cursor.execute(sql, params)Выполняет SQL с параметрамиcursor.execute("SELECT * FROM t WHERE id = %s", (1,))
cursor.fetchall()Возвращает все строкиrows = cursor.fetchall()
cursor.fetchone()Возвращает одну строку или Nonerow = cursor.fetchone()
for row in cursorИтерация по строкамfor row in cursor: print(row)

Синтаксис JOIN

Соединение двух таблиц по полю:

SELECT first_name, last_name, department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id

Альтернатива с USING, если имена столбцов совпадают:

SELECT first_name, last_name, department_name
FROM employees
JOIN departments USING (department_id)

Сортировка

SELECT first_name, last_name, salary
FROM employees
ORDER BY salary DESC

DESC — по убыванию, ASC — по возрастанию (используется по умолчанию).

Форматирование вывода

Для нумерации строк и подстановки значений используйте f-string и enumerate:

for i, (first, last, title, salary) in enumerate(rows, start=1):
    print(f"{i}. {first} {last} — {title} — {salary}")

Исключения

ИсключениеКогда возникает
pymysql.MySQLErrorБазовый класс ошибок PyMySQL
pymysql.OperationalErrorПроблемы соединения
pymysql.ProgrammingErrorОшибки в SQL-запросе
ValueErrorНекорректное преобразование строки в число
IndexErrorИндекс за пределами списка
Проверить по документации: полный список исключений PyMySQL, поддерживаемые параметры connect и поведение автокоммита см. в официальной документации PyMySQL.