Создание таблицы в MySQL с помощью Python
Узнайте, как создавать таблицы MySQL в Python с помощью mysql-connector-python. Рассматриваются CREATE TABLE, типы данных, ограничения, IF NOT EXISTS и SHOW TABLES.
Создание таблицы — это первый шаг к хранению структурированных данных в MySQL. В этой главе показано, как определить и создать таблицу MySQL из Python с помощью mysql-connector-python: описываются типы данных столбцов, распространённые ограничения, защита IF NOT EXISTS, способы получения списка существующих таблиц и обработка ошибок.
Предварительные требования
Перед запуском примеров убедитесь, что у вас есть:
- Python 3.x
- Работающий сервер MySQL
- Установленный
mysql-connector-python:
pip install mysql-connector-python- База данных для работы (см. MySQL Create Database, если вам нужно её создать)
Подключение к MySQL
Каждая операция начинается с установки соединения. Передайте учётные данные и имя целевой базы данных в mysql.connector.connect():
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()Объект cursor() используется для отправки SQL-запросов на сервер.
Создание таблицы
Используйте SQL-оператор CREATE TABLE внутри cursor.execute() для определения новой таблицы. В примере ниже создаётся таблица customers с четырьмя столбцами:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
mycursor.close()
mydb.close()Типы и ограничения столбцов из примера выше
| Столбец | Тип | Примечания |
|---|---|---|
id | INT | AUTO_INCREMENT генерирует уникальный ID для каждой строки; PRIMARY KEY обеспечивает уникальность и ускоряет поиск |
name | VARCHAR(255) | Строка переменной длины до 255 символов; NOT NULL означает, что каждая строка должна содержать значение |
address | VARCHAR(255) | Необязательное поле — без NOT NULL, поэтому принимает NULL |
age | INT | Хранит целые числа |
Использование IF NOT EXISTS
Выполнение CREATE TABLE для уже существующей таблицы вызывает ошибку. Добавьте IF NOT EXISTS, чтобы оператор не выполнял никаких действий, если таблица уже есть:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Done — table created or already exists.")
mycursor.close()
mydb.close()Этот шаблон можно безопасно вызывать при каждом запуске приложения, не опасаясь ошибок дублирования таблиц.
Список таблиц для проверки создания
После создания таблицы можно убедиться в её существовании, выполнив SHOW TABLES:
import mysql.connector
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("SHOW TABLES")
tables = [row[0] for row in mycursor.fetchall()]
print("Tables in database:", tables)
if "customers" in tables:
print("customers table is ready.")
else:
print("customers table was not found.")
mycursor.close()
mydb.close()Пример вывода:
Tables in database: ['customers']
customers table is ready.Обработка ошибок
Оборачивание кода создания таблицы в блок try/except позволяет перехватывать проблемы — например, потерю соединения или синтаксическую ошибку в SQL — без аварийного завершения программы:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS customers (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
address VARCHAR(255),
age INT
)
"""
mycursor.execute(sql)
print("Table created successfully.")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()
print("Connection closed.")Блок finally гарантирует закрытие соединения в любом случае, даже если возникло исключение.
Распространённые типы данных столбцов
MySQL поддерживает множество типов данных. Вот те, которые чаще всего используются в Python-приложениях:
| Тип данных | Применение |
|---|---|
INT | Целые числа (идентификаторы, счётчики, возраст) |
FLOAT, DOUBLE | Десятичные числа (цены, измерения) |
VARCHAR(n) | Текст переменной длины до n символов |
TEXT | Длинные строки без фиксированного максимума |
DATE | Календарные даты (YYYY-MM-DD) |
DATETIME | Дата и время вместе (YYYY-MM-DD HH:MM:SS) |
BOOLEAN | TRUE / FALSE (хранится как TINYINT(1)) |
Более полный пример
Вот более реалистичная таблица, в которой используются несколько типов данных и ограничений одновременно:
import mysql.connector
from mysql.connector import Error
try:
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
mycursor = mydb.cursor()
sql = """
CREATE TABLE IF NOT EXISTS orders (
id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT NOT NULL,
product VARCHAR(255) NOT NULL,
quantity INT NOT NULL DEFAULT 1,
price FLOAT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP
)
"""
mycursor.execute(sql)
print("orders table created (or already exists).")
except Error as e:
print(f"Error: {e}")
finally:
if mydb.is_connected():
mycursor.close()
mydb.close()DEFAULT 1 означает, что quantity устанавливается в 1, если значение не указано. DEFAULT CURRENT_TIMESTAMP автоматически записывает время вставки каждой строки заказа.
Заключение
Чтобы создать таблицу в MySQL из Python:
- Установите
mysql-connector-pythonи подключитесь к базе данных. - Напишите оператор
CREATE TABLE, определяющий имя, тип данных и ограничения каждого столбца. - Используйте
IF NOT EXISTS, чтобы избежать ошибок при повторных запусках. - Выполните
SHOW TABLES(или запроситеinformation_schema.tables), чтобы убедиться, что таблица создана. - Всегда закрывайте курсор и соединение — в идеале в блоке
finally.
После создания таблицы можно начать вставку строк (см. MySQL Insert) и их последующее чтение (см. MySQL Select).