Введение
MySQL — одна из самых популярных реляционных баз данных, широко используемая в веб-разработке и корпоративных решениях. Для работы с MySQL в Python часто используется драйвер PyMySQL — чисто Python-реализация протокола MySQL. Он прост в использовании, активно поддерживается и совместим с популярными библиотеками, такими как SQLAlchemy и Pandas.
PyMySQL – драйвер для MySQL позволяет подключаться к базе, выполнять SQL-запросы, управлять транзакциями и интегрироваться с веб-фреймворками без сложной настройки.
Установка и подключение к MySQL
Установка
Подключение к базе данных
DictCursor
позволяет получать результаты в виде словарей, а не кортежей.
Создание базы данных и таблиц
CRUD-операции с PyMySQL
Вставка данных
Чтение данных
Обновление и удаление
Использование курсора и управление транзакциями
-
cursor()
— создаёт объект курсора -
commit()
— сохраняет изменения -
rollback()
— откатывает транзакцию
Обработка результатов запросов
Методы:
-
fetchone()
— одна строка -
fetchall()
— список всех строк -
fetchmany(n)
— первыеn
строк
Безопасность и защита от SQL-инъекций
PyMySQL поддерживает параметризацию:
Нельзя использовать форматирование строк — это уязвимо к SQL-инъекциям.
Работа с датами и временем
Интеграция с Pandas и другими библиотеками
Асинхронная работа и совместимость
PyMySQL — синхронная библиотека. Для асинхронной работы используйте aiomysql
или asyncmy
. В SQLAlchemy есть поддержка async с PyMySQL-подобными драйверами.
Интеграция с Flask, Django, FastAPI
Flask
Django
В settings.py
:
FastAPI
Используется через SQLAlchemy + PyMySQL:
Обработка ошибок и исключений
Сравнение с другими драйверами
Драйвер | Язык | Асинхронность | Установка | Поддержка SQLAlchemy |
---|---|---|---|---|
PyMySQL | Python | Нет | Легко | Да |
mysqlclient | C/Python | Нет | Сложнее | Да |
MySQL Connector | Python | Нет | Легко | Да |
aiomysql | Python | Да | Средне | Нет |
Тестирование с PyMySQL
-
Используйте отдельную тест-базу
-
Очищайте таблицы в
setup
/teardown
-
Используйте SQLite как замену в CI при необходимости
Часто задаваемые вопросы (FAQ)
1. Что такое PyMySQL?
Это чисто Python-драйвер для подключения к MySQL-серверу.
2. Поддерживает ли PyMySQL асинхронность?
Нет, для этого используют aiomysql или asyncmy.
3. Можно ли использовать PyMySQL с SQLAlchemy?
Да, указывается как mysql+pymysql
в строке подключения.
4. Как защититься от SQL-инъекций?
Всегда используйте параметризацию через %s
.
5. Работает ли PyMySQL в Django?
Да, используется через django.db.backends.mysql
.
6. Есть ли альтернатива PyMySQL?
Да: mysqlclient, MySQL Connector, aiomysql (async).
Полный справочник по ключевым функциям и модулям библиотеки PyMySQL для Python
Установка
Подключение к базе данных
Функция / Метод | Описание |
---|---|
pymysql.connect(...) |
Создает соединение с MySQL. |
Выполнение SQL-запросов
Метод | Описание |
---|---|
cursor.execute(query, params) |
Выполняет одиночный SQL-запрос. |
cursor.executemany(query, param_list) |
Выполняет несколько запросов. |
cursor.fetchall() |
Возвращает все строки результата. |
cursor.fetchone() |
Возвращает одну строку. |
cursor.fetchmany(size) |
Возвращает size строк. |
Параметры запроса
Формат | Пример |
---|---|
%s |
Безопасный плейсхолдер |
cursor.execute("INSERT INTO users (name) VALUES (%s)", ("Ваня",)) |
Передача параметров |
Коммит и откат транзакций
Метод | Описание |
---|---|
conn.commit() |
Подтверждение изменений. |
conn.rollback() |
Откат изменений. |
Закрытие соединений
Метод | Описание |
---|---|
cursor.close() |
Закрывает курсор. |
conn.close() |
Закрывает соединение. |
Создание и удаление таблиц
Вставка, обновление и удаление данных
Обработка ошибок
Исключение | Описание |
---|---|
pymysql.MySQLError |
Базовое исключение. |
pymysql.OperationalError |
Ошибки соединения. |
pymysql.ProgrammingError |
Ошибки в SQL-запросе. |
Использование с with
(контекстный менеджер)
Использование с pandas
Использование с SQLAlchemy
Дополнительные параметры подключения
Параметр | Описание |
---|---|
autocommit=True |
Включить автокоммит. |
cursorclass=pymysql.cursors.DictCursor |
Результаты в виде словарей. |
ssl={"ssl": {}} |
Использование SSL. |
Пример полного взаимодействия
Заключение
PyMySQL – драйвер для MySQL предоставляет Python-разработчикам мощный и простой способ взаимодействия с базой данных MySQL. Благодаря чистой реализации, совместимости с Pandas, SQLAlchemy и фреймворками, PyMySQL — надёжный выбор для большинства проектов.