Подключение и использование MySQL с Python

MySQL — одна из самых популярных реляционных баз данных с открытым исходным кодом, а Python — один из самых популярных языков программирования сегодня. Сочетание Python с MySQL позволяет нам легко разрабатывать приложения, управляемые базами данных.

В этой статье будет подробно рассказано, как использовать Python для подключения к базе данных MySQL и работы с ней, включая следующие темы:

  1. Как установить драйвер MySQL для Python
  2. Установка и закрытие соединений с базой данных
  3. Выполнение различных SQL-запросов
  4. Управление транзакциями и обработка ошибок
  5. Лучшие практики для операций с базами данных

Подготовка

Установите необходимое программное обеспечение

Прежде чем начать, убедитесь, что у вас установлено следующее программное обеспечение:

  • 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Базовый код для подключения к базе данных:

Пример

import mysql.connector

# Создать подключение к базе данных
db = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="yourdatabase"
)

print("Подключение к базе данных выполнено успешно!")

Объяснение параметров подключения

  • host: адрес сервера MySQL (локальный — "localhost")
  • user: имя пользователя базы данных
  • password: пароль пользователя
  • database: имя базы данных для подключения (необязательно)

Подключение с использованием PyMySQL

Если вы решите использовать PyMySQL, метод подключения немного отличается:

Пример

import pymysql

# Создать подключение к базе данных
db = pymysql.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="yourdatabase"
)

print("Подключение к базе данных выполнено успешно!")

Выполнение SQL-запросов

Создание объекта курсора

Перед выполнением SQL-инструкций нам нужно создать объект курсора:

Пример

cursor = db.cursor()

Выполнение SELECT-запроса

Пример

cursor.execute("SELECT * FROM your_table")

# Извлечь все результаты
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-инъекции, всегда следует использовать параметризованные запросы:

Пример

sql = "SELECT * FROM users WHERE name = %s"
name = ("Чжан Сан",)
cursor.execute(sql, name)

Управление транзакциями

Основные понятия транзакций

Транзакция MySQL — это группа атомарных SQL-запросов, в которой либо все выполняются успешно, либо ни один не выполняется вообще.

Использование транзакций

Пример

try:
    # Начать транзакцию
    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)

Обработка ошибок

Перехват ошибок базы данных

Пример

try:
    cursor.execute("SELECT * FROM non_existent_table")
except mysql.connector.Error as err:
    print("Ошибка базы данных:", err)

Распространённые коды ошибок

  • 1045: Доступ запрещён (неверное имя пользователя или пароль)
  • 1049: Неизвестная база данных
  • 1146: Таблица не существует
  • 1062: Дублирующееся значение ключа

Закрытие соединений

Правильное закрытие соединений

После завершения операций с базой данных следует закрыть курсор и соединение:

Пример

cursor.close()
db.close()
print("Соединение с базой данных закрыто")

Использование оператора with

Pythonwithоператор может автоматически управлять ресурсами:

Пример

with mysql.connector.connect(
    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

Лучшие практики

Пул соединений

Для приложений, которые часто подключаются к базе данных, рекомендуется использовать пул соединений:

Пример

from mysql.connector import pooling

# Создание пула соединений
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.


Другие расширения