Подключение и использование MySQL с Python
MySQL — одна из самых популярных реляционных баз данных с открытым исходным кодом, а Python — один из самых популярных языков программирования сегодня. Сочетание Python с MySQL позволяет нам легко разрабатывать приложения, управляемые базами данных.
В этой статье будет подробно рассказано, как использовать Python для подключения к базе данных MySQL и работы с ней, включая следующие темы:
- Как установить драйвер MySQL для Python
- Установка и закрытие соединений с базой данных
- Выполнение различных SQL-запросов
- Управление транзакциями и обработка ошибок
- Лучшие практики для операций с базами данных
Подготовка
Установите необходимое программное обеспечение
Прежде чем начать, убедитесь, что у вас установлено следующее программное обеспечение:
- Python(Рекомендуется 3.6 или выше)
- MySQL Server(Community Edition вполне достаточно)
- MySQL Connector/Python(драйвер MySQL для Python)
Установите MySQL Connector/Python
Вы можете установить официальный драйвер MySQL для Python через pip:
pip install mysql-connector-python
Или установите PyMySQL (другой популярный драйвер MySQL для Python):
pip install pymysql
Подключение к базе данных MySQL
Установите базовое соединение
Далее используетсяmysql-connector-pythonБазовый код для подключения к базе данных:
Пример
# Создать подключение к базе данных
db = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
print("Подключение к базе данных выполнено успешно!")
Объяснение параметров подключения
host: адрес сервера MySQL (локальный — "localhost")user: имя пользователя базы данныхpassword: пароль пользователяdatabase: имя базы данных для подключения (необязательно)
Подключение с использованием PyMySQL
Если вы решите использовать PyMySQL, метод подключения немного отличается:
Пример
# Создать подключение к базе данных
db = pymysql.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
print("Подключение к базе данных выполнено успешно!")
Выполнение SQL-запросов
Создание объекта курсора
Перед выполнением SQL-инструкций нам нужно создать объект курсора:
Пример
Выполнение SELECT-запроса
Пример
# Извлечь все результаты
results = cursor.fetchall()
for row in results:
print(row)
Выполнение операций INSERT, UPDATE, DELETE
Пример
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
values = ("Zhang San", 25)
cursor.execute(sql, values)
# Зафиксировать транзакцию
db.commit()
print(cursor.rowcount, " записей успешно вставлено")
Использование параметризованных запросов
Чтобы предотвратить SQL-инъекции, всегда следует использовать параметризованные запросы:
Пример
name = ("Чжан Сан",)
cursor.execute(sql, name)
Управление транзакциями
Основные понятия транзакций
Транзакция MySQL — это группа атомарных SQL-запросов, в которой либо все выполняются успешно, либо ни один не выполняется вообще.
Использование транзакций
Пример
# Начать транзакцию
cursor.execute("START TRANSACTION")
# Выполнить несколько SQL-инструкций
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
cursor.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
# Зафиксировать транзакцию
db.commit()
print("Транзакция успешно выполнена")
except Exception as e:
# Произошла ошибка, откатите транзакцию
db.rollback()
print("Не удалось выполнить транзакцию:", e)
Обработка ошибок
Перехват ошибок базы данных
Пример
cursor.execute("SELECT * FROM non_existent_table")
except mysql.connector.Error as err:
print("Ошибка базы данных:", err)
Распространённые коды ошибок
1045: Доступ запрещён (неверное имя пользователя или пароль)1049: Неизвестная база данных1146: Таблица не существует1062: Дублирующееся значение ключа
Закрытие соединений
Правильное закрытие соединений
После завершения операций с базой данных следует закрыть курсор и соединение:
Пример
db.close()
print("Соединение с базой данных закрыто")
Использование оператора with
Pythonwithоператор может автоматически управлять ресурсами:
Пример
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
) as db:
with db.cursor() as cursor:
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
print(row)
# Соединение автоматически закроется после выхода из блока with
Лучшие практики
Пул соединений
Для приложений, которые часто подключаются к базе данных, рекомендуется использовать пул соединений:
Пример
# Создание пула соединений
db_pool = pooling.MySQLConnectionPool(
pool_name="mypool",
pool_size=5,
host="localhost",
user="yourusername",
password="yourpassword",
database="yourdatabase"
)
# Получение соединения из пула соединений
db = db_pool.get_connection()
ORM-фреймворк
Для сложных приложений можно рассмотреть использование ORM-фреймворка (объектно-реляционное отображение), такого как SQLAlchemy или Django ORM.
Другие расширения