🔖 Справочник: работа с MySQL в Python

Подключение и соединение

КонструкцияНазначение
import pymysqlИмпорт библиотеки
pymysql.connect(host=..., user=..., password=..., database=...)Создание соединения с базой данных
pymysql.connect(**config)Создание соединения из словаря параметров
connection.openПроверка, что соединение открыто
connection.close()Закрытие соединения
connection.cursor()Создание курсора
connection.commit()Сохранение изменений в базе
connection.rollback()Откат изменений в текущей транзакции

Параметры подключения

ПараметрНазначение
hostАдрес сервера базы данных
userИмя пользователя
passwordПароль пользователя
databaseНазвание базы данных (необязательно)
charsetКодировка соединения, например utf8mb4
cursorclassКласс курсора, например DictCursor

Курсор

МетодНазначение
cursor()Создаёт курсор для выполнения запросов
cursor.execute(sql, params)Выполняет SQL-запрос с параметрами
cursor.executemany(sql, seq_of_params)Выполняет запрос несколько раз с разными параметрами
cursor.fetchone()Возвращает одну следующую строку или None
cursor.fetchmany(size)Возвращает заданное количество строк
cursor.fetchall()Возвращает все оставшиеся строки
cursor.close()Закрывает курсор
for row in cursor:Итерация по результатам запроса

Параметризованные запросы

ПлейсхолдерФормат параметровПример
%sКортеж или списокexecute("SELECT * FROM t WHERE id = %s", (1,))
%(name)sСловарьexecute("SELECT * FROM t WHERE id = %(id)s", {"id": 1})

Исключения PyMySQL

ИсключениеКогда возникает
pymysql.MySQLErrorБазовый класс всех ошибок MySQL
pymysql.ProgrammingErrorОшибки в SQL-запросе, например несуществующая таблица
pymysql.OperationalErrorПроблемы подключения или работы сервера

Контекстный менеджер with

КонструкцияНазначение
with pymysql.connect(...) as connection:Автоматически закрывает соединение
with connection.cursor() as cursor:Автоматически закрывает курсор
with connection.cursor() as cursor: ... connection.commit()Безопасное выполнение изменяющего запроса

DictCursor

КонструкцияНазначение
from pymysql.cursors import DictCursorИмпорт класса курсора-словаря
cursorclass=DictCursorПередача в pymysql.connect()
row["column_name"]Доступ к значению по имени колонки

SQL-команды управления данными

КомандаНазначениеНужен commit()?
SELECTПолучение данныхНет
INSERTДобавление данныхДа
UPDATEОбновление данныхДа
DELETEУдаление данныхДа
CREATE DATABASEСоздание базы данныхНет
CREATE TABLEСоздание таблицыНет
USE database_nameВыбор активной базы данныхНет

Транзакции

МетодНазначение
connection.commit()Подтверждает все изменения в текущей транзакции
connection.rollback()Отменяет все изменения в текущей транзакции