Урок 80. MySQL и Python

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

⚡ Кратко: главные команды

  • pymysql.connect(host=..., user=..., password=..., database=..., charset="utf8mb4") — создаёт соединение.
  • connection.open — проверяет, открыто ли соединение.
  • connection.close() — закрывает соединение.
  • cursor = connection.cursor() — создаёт курсор.
  • cursor.execute(sql, params) — выполняет SQL с параметрами.
  • cursor.fetchone(), fetchmany(n), fetchall() — читают результат.
  • for row in cursor — итерация по курсору.
  • %s и %(name)s — плейсхолдеры для параметров.
  • pymysql.MySQLError, ProgrammingError, OperationalError — основные исключения.

🔖 Справочник по PyMySQL

Соединение

Команда / параметрОписаниеПример
pymysql.connect(...) Создаёт объект соединения с MySQL connection = pymysql.connect(host="localhost", user="root", password="pass", database="hr")
host Адрес сервера базы данных host="localhost"
user Имя пользователя MySQL user="root"
password Пароль пользователя password="secret"
database Имя базы данных (необязательно) database="hr"
charset Кодировка соединения charset="utf8mb4"
port Порт сервера MySQL (по умолчанию 3306) port=3306
connection.open Возвращает True, если соединение открыто if connection.open: print("OK")
connection.close() Закрывает соединение connection.close()

Курсор

МетодОписаниеПример
connection.cursor() Создаёт курсор для выполнения запросов cursor = connection.cursor()
cursor.close() Закрывает курсор и освобождает ресурсы cursor.close()
cursor.execute(sql, params) Выполняет SQL-запрос с необязательными параметрами cursor.execute("SELECT * FROM employees WHERE id = %s", (1,))
cursor.fetchone() Возвращает следующую строку или None row = cursor.fetchone()
cursor.fetchmany(size) Возвращает до size строк rows = cursor.fetchmany(5)
cursor.fetchall() Возвращает все оставшиеся строки rows = cursor.fetchall()
for row in cursor Итерируется по строкам результата for row in cursor: print(row)

Плейсхолдеры

ТипСинтаксис в SQLТип данных PythonПример
Позиционный %s Кортеж или список cursor.execute("SELECT * FROM t WHERE id = %s", (10,))
Именованный %(name)s Словарь cursor.execute("SELECT * FROM t WHERE id = %(id)s", {"id": 10})

Плейсхолдер %s используется для любого типа данных, не только для строк. Библиотека сама экранирует значения.

Работа с изменениями

Для запросов, изменяющих данные (INSERT, UPDATE, DELETE), нужно вызвать connection.commit(), чтобы изменения сохранились в базе:

cursor.execute("INSERT INTO departments (name) VALUES (%s)", ("IT",))
connection.commit()
⚠️ Проверить по документации: в PyMySQL по умолчанию автокоммит отключён. В некоторых других библиотеках поведение может отличаться — сверяйтесь с документацией.

Основные исключения

ИсключениеКогда возникает
pymysql.MySQLErrorБазовый класс для всех ошибок PyMySQL
pymysql.ProgrammingErrorОшибки в SQL-запросе (синтаксис, отсутствие таблицы)
pymysql.OperationalErrorПроблемы соединения (сервер недоступен, неверный пароль)
pymysql.IntegrityErrorНарушение ограничений базы данных
pymysql.DataErrorОшибки с данными (например, слишком длинное значение)
⚠️ Проверить по документации: полный список исключений и их иерархию см. в официальной документации PyMySQL. В лекции упоминаются только MySQLError, ProgrammingError и OperationalError.