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.