Начало работы с MySQL
Узнайте, как подключить Python к MySQL с помощью mysql-connector-python: установка, подключение, создание баз данных и выполнение запросов.
Python может работать с базами данных MySQL через официальный драйвер MySQL Connector/Python. В этой главе показано, как установить драйвер, установить соединение, создать базу данных и выполнить первые запросы — это даст вам прочную основу перед переходом к созданию таблиц, вставке строк и получению данных.
Что потребуется
Прежде чем писать код, необходимо выполнить два условия:
- Python 3.7 или новее, установленный на вашем компьютере.
- Работающий сервер MySQL — локальная установка (MySQL Community Server) или облачный экземпляр (PlanetScale, Amazon RDS и т. д.).
Создавать базу данных заранее не нужно — вы создадите её из Python в одном из следующих разделов.
Установка MySQL Connector/Python
MySQL Connector/Python — это официальный драйвер MySQL, поддерживаемый Oracle. Установите его с помощью pip:
pip install mysql-connector-pythonПроверьте установку:
import mysql.connector
print(mysql.connector.__version__)
# Example output: 8.4.0Если вы видите номер версии, драйвер готов к использованию.
Почему mysql-connector-python, а не PyMySQL?
Оба драйвера работают, но mysql-connector-python — это официально поддерживаемый драйвер от Oracle. По умолчанию он использует реализацию на чистом Python, а при необходимости — расширение на C для повышения производительности. PyMySQL — популярная альтернатива от сообщества с практически идентичным API. В главах этого раздела используется mysql-connector-python.
Подключение к серверу MySQL
Используйте mysql.connector.connect() для открытия соединения. Передайте учётные данные в виде именованных аргументов:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
if connection.is_connected():
print("Connected to MySQL Server")
connection.close()Замените yourusername и yourpassword на ваши реальные учётные данные. Значение host равно "localhost", если MySQL работает на том же компьютере; для удалённого сервера укажите IP-адрес или имя хоста.
Как не хранить учётные данные в исходном коде
Жёсткое кодирование паролей в скриптах представляет угрозу безопасности. Храните их в переменных окружения и считывайте во время выполнения:
import mysql.connector
import os
connection = mysql.connector.connect(
host=os.environ.get("MYSQL_HOST", "localhost"),
user=os.environ.get("MYSQL_USER"),
password=os.environ.get("MYSQL_PASSWORD")
)
print("Connected:", connection.is_connected())
connection.close()Задайте переменные в командной оболочке перед запуском скрипта:
export MYSQL_USER=yourusername
export MYSQL_PASSWORD=yourpassword
python connect.pyСоздание базы данных
После подключения к серверу (без указания базы данных) можно создать её с помощью оператора CREATE DATABASE. Выполните его через курсор — объект, который отправляет SQL-команды и получает результаты.
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
print("Database created")
cursor.close()
connection.close()Конструкция IF NOT EXISTS предотвращает ошибку, если база данных уже существует.
Просмотр списка баз данных
Убедиться в том, что база данных создана, можно, выведя список всех баз данных на сервере:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
cursor = connection.cursor()
cursor.execute("SHOW DATABASES")
for db in cursor:
print(db)
cursor.close()
connection.close()Каждая строка возвращается в виде кортежа, поэтому вывод будет выглядеть примерно так:
('information_schema',)
('mydatabase',)
('mysql',)
('performance_schema',)
('sys',)Подключение к конкретной базе данных
После того как база данных создана, укажите параметр database при подключении, чтобы все последующие запросы выполнялись именно в ней:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Database in use:", connection.database)
connection.close()Использование контекстного менеджера (рекомендуемый подход)
Вручную вызывать .close() для каждого соединения и курсора ненадёжно — если до .close() возникнет исключение, соединение утечёт. Используйте блок try/finally или, что ещё лучше, оберните курсор в оператор with:
import mysql.connector
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
try:
with connection.cursor() as cursor:
cursor.execute("SELECT DATABASE()")
row = cursor.fetchone()
print("Current database:", row[0])
finally:
connection.close()Блок with автоматически закрывает курсор при выходе из блока, даже если было выброшено исключение.
Обработка ошибок соединения
Проблемы с сетью или неверные учётные данные вызывают mysql.connector.Error. Всегда обрабатывайте это исключение в production-коде:
import mysql.connector
from mysql.connector import Error
try:
connection = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
print("Connection successful")
except Error as e:
print(f"Error connecting to MySQL: {e}")
finally:
if "connection" in dir() and connection.is_connected():
connection.close()
print("Connection closed")Распространённые ошибки, с которыми вы можете столкнуться:
| Код ошибки | Значение |
|---|---|
| 1045 | Доступ запрещён — неверное имя пользователя или пароль |
| 2003 | Не удаётся подключиться к хосту — сервер не запущен или указан неверный хост/порт |
| 1049 | Неизвестная база данных — база данных с указанным именем не существует |
Краткий справочник: параметры подключения
| Параметр | Тип | Описание |
|---|---|---|
host | str | Имя хоста или IP-адрес сервера MySQL (по умолчанию "127.0.0.1") |
port | int | Порт MySQL (по умолчанию 3306) |
user | str | Имя пользователя MySQL |
password | str | Пароль MySQL |
database | str | База данных, выбираемая при подключении |
charset | str | Кодировка символов (по умолчанию "utf8mb4") |
connect_timeout | int | Время ожидания подключения в секундах (по умолчанию 10) |
use_pure | bool | True = чистый Python; False = расширение на C, если доступно |
Что дальше
Теперь, когда соединение работает, вы готовы развивать его дальше:
- Создание таблицы — определите столбцы и типы данных с помощью
CREATE TABLE. - Вставка строк — добавьте данные с помощью
INSERT INTOи параметризованных запросов. - Получение данных — извлеките строки с помощью
SELECT,fetchone()иfetchall(). - Фильтрация строк — сузьте результаты с помощью условий
WHERE. - Создание базы данных — подробное руководство по команде
CREATE DATABASE.