W3docs

MySQL — создание базы данных

Узнайте, как создать базу данных MySQL в Python с помощью mysql-connector-python: подключение, создание, просмотр и выбор баз данных.

В этой главе объясняется, как создать базу данных MySQL из Python с помощью библиотеки mysql-connector-python. Вы научитесь подключаться к серверу MySQL, выполнять оператор CREATE DATABASE, просматривать доступные базы данных и выбирать базу данных для последующих запросов.

Если вы ещё не установили коннектор, сначала изучите раздел MySQL: начало работы. После создания базы данных следующий шаг — создание таблиц.

Установка коннектора MySQL

Установите официальный драйвер MySQL для Python с помощью pip:

pip install mysql-connector-python

Этот пакет работает с Python 3.6 и выше и не требует отдельного расширения на языке C.

Подключение к серверу MySQL

Перед созданием базы данных необходимо установить соединение с сервером MySQL. Укажите адрес хоста, учётную запись пользователя и пароль. Обратите внимание, что на этом этапе вы не указываете параметр database — базы данных ещё не существует.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

print(mydb)   # <mysql.connector.connection.MySQLConnection object at 0x...>
mydb.close()

Если данные подключения указаны неверно, mysql.connector.connect() вызывает исключение mysql.connector.errors.InterfaceError. В производственном коде оберните вызов в блок try/except.

Создание базы данных

После подключения получите курсор и выполните SQL-оператор CREATE DATABASE. Курсор — это объект, через который отправляются все SQL-команды.

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")

mycursor.close()
mydb.close()

Если mydatabase уже существует, сервер выдаст ошибку. Добавьте IF NOT EXISTS, чтобы оператор стал идемпотентным — он выполнится успешно независимо от того, новая база данных или уже существующая:

mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")

Правила именования баз данных

  • Имена могут содержать буквы, цифры и знаки подчёркивания (_).
  • На Windows имена нечувствительны к регистру, а на большинстве систем Linux — чувствительны.
  • Максимальная длина — 64 символа.
  • Избегайте зарезервированных слов, таких как database, table или select, в качестве имён баз данных; если всё же нужно их использовать, заключайте имя в обратные кавычки в SQL.

Указание кодировки

По умолчанию MySQL использует кодировку сервера (обычно utf8mb4 в современных установках). Вы можете явно задать кодировку и сопоставление, чтобы обеспечить одинаковое поведение на разных серверах:

mycursor.execute(
    "CREATE DATABASE IF NOT EXISTS mydatabase "
    "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
)

utf8mb4 поддерживает полный диапазон Unicode (включая эмодзи). utf8mb4_unicode_ci — это сопоставление без учёта регистра и диакритических знаков, подходящее для большинства веб-приложений.

Просмотр существующих баз данных

После создания базы данных можно убедиться в её существовании, выполнив SHOW DATABASES, который возвращает по одной строке на каждую базу данных:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword"
)

mycursor = mydb.cursor()
mycursor.execute("SHOW DATABASES")

for (db_name,) in mycursor:
    print(db_name)

mycursor.close()
mydb.close()

Каждая строка, возвращаемая SHOW DATABASES, является кортежем из одного элемента, поэтому распаковка (db_name,) напрямую извлекает строку. Типичный вывод выглядит так:

information_schema
mydatabase
mysql
performance_schema
sys

Чтобы проверить наличие только конкретной базы данных, можно выполнить фильтрацию в Python:

mycursor.execute("SHOW DATABASES")
databases = [row[0] for row in mycursor]

if "mydatabase" in databases:
    print("Database found.")
else:
    print("Database not found.")

Выбор базы данных

После того как база данных создана, передайте её имя в аргументе database при открытии соединения — это стандартный подход для всей последующей работы:

import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",
    user="yourusername",
    password="yourpassword",
    database="mydatabase"   # select the database here
)

mycursor = mydb.cursor()
# All queries now run against mydatabase
mycursor.close()
mydb.close()

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

mycursor.execute("USE mydatabase")

Это удобно, когда нужно переключаться между несколькими базами данных в одном скрипте, однако для большинства случаев использование параметра database= в connect() является более наглядным решением.

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

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

import mysql.connector
from mysql.connector import Error

mydb = None
try:
    mydb = mysql.connector.connect(
        host="localhost",
        user="yourusername",
        password="yourpassword"
    )
    mycursor = mydb.cursor()
    mycursor.execute("CREATE DATABASE IF NOT EXISTS mydatabase")
    print("Database created (or already exists).")
except Error as e:
    print(f"Error: {e}")
finally:
    if mydb is not None and mydb.is_connected():
        mycursor.close()
        mydb.close()

Блок finally гарантирует закрытие соединения даже при возникновении исключения, предотвращая утечку соединений.

Полный рабочий пример

Приведённый ниже фрагмент объединяет все шаги: создание базы данных, проверку её наличия в SHOW DATABASES, а затем повторное подключение с выбором этой базы данных:

import mysql.connector
from mysql.connector import Error

DB_NAME = "mydatabase"

def create_database():
    try:
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword"
        )
        cursor = conn.cursor()

        # Create the database if it does not exist
        cursor.execute(
            f"CREATE DATABASE IF NOT EXISTS {DB_NAME} "
            "CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"
        )
        print(f"Database '{DB_NAME}' created (or already exists).")

        # Confirm it appears in the database list
        cursor.execute("SHOW DATABASES")
        databases = [row[0] for row in cursor]
        if DB_NAME in databases:
            print(f"Confirmed: '{DB_NAME}' is listed on the server.")

        cursor.close()
        conn.close()

        # Re-connect with the database selected
        conn = mysql.connector.connect(
            host="localhost",
            user="yourusername",
            password="yourpassword",
            database=DB_NAME
        )
        print(f"Connected to '{DB_NAME}' successfully.")
        conn.close()

    except Error as e:
        print(f"Error: {e}")

create_database()

Ожидаемый вывод при запуске на чистом сервере MySQL:

Database 'mydatabase' created (or already exists).
Confirmed: 'mydatabase' is listed on the server.
Connected to 'mydatabase' successfully.

Следующие шаги

  • MySQL: создание таблицы — определите таблицы внутри только что созданной базы данных.
  • MySQL Insert — вставьте строки в ваши таблицы.
  • MySQL Select — выполните запрос данных с помощью SELECT.
Was this page helpful?