W3docs

Создание таблицы в 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()

Типы и ограничения столбцов из примера выше

СтолбецТипПримечания
idINTAUTO_INCREMENT генерирует уникальный ID для каждой строки; PRIMARY KEY обеспечивает уникальность и ускоряет поиск
nameVARCHAR(255)Строка переменной длины до 255 символов; NOT NULL означает, что каждая строка должна содержать значение
addressVARCHAR(255)Необязательное поле — без NOT NULL, поэтому принимает NULL
ageINTХранит целые числа

Использование 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)
BOOLEANTRUE / 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:

  1. Установите mysql-connector-python и подключитесь к базе данных.
  2. Напишите оператор CREATE TABLE, определяющий имя, тип данных и ограничения каждого столбца.
  3. Используйте IF NOT EXISTS, чтобы избежать ошибок при повторных запусках.
  4. Выполните SHOW TABLES (или запросите information_schema.tables), чтобы убедиться, что таблица создана.
  5. Всегда закрывайте курсор и соединение — в идеале в блоке finally.

После создания таблицы можно начать вставку строк (см. MySQL Insert) и их последующее чтение (см. MySQL Select).

Was this page helpful?