Урок 80. MySQL и Python
⚡ Кратко: главные команды
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.