W3docs

Начало работы с 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Неизвестная база данных — база данных с указанным именем не существует

Краткий справочник: параметры подключения

ПараметрТипОписание
hoststrИмя хоста или IP-адрес сервера MySQL (по умолчанию "127.0.0.1")
portintПорт MySQL (по умолчанию 3306)
userstrИмя пользователя MySQL
passwordstrПароль MySQL
databasestrБаза данных, выбираемая при подключении
charsetstrКодировка символов (по умолчанию "utf8mb4")
connect_timeoutintВремя ожидания подключения в секундах (по умолчанию 10)
use_pureboolTrue = чистый Python; False = расширение на C, если доступно

Что дальше

Теперь, когда соединение работает, вы готовы развивать его дальше:

Was this page helpful?