Основы SQLAlchemy Core

SQLAlchemy Core: основы и примеры

SQLAlchemy — это гибкая и мощная библиотека для работы с базами данных в Python. В то время как её ORM-компонент часто находится в центре внимания, компонент Core может быть исключительно полезным для тех, кто ищет больший контроль над генерируемым SQL и схемой базы данных.

SQLAlchemy Core предоставляет способ представления и взаимодействия со схемой базы данных и SQL-запросами. Он рассматривает базу данных как набор таблиц, которые в свою очередь состоят из столбцов, индексов и ограничений. С помощью Core вы можете создавать, изменять и удалять таблицы, а также формировать и выполнять запросы к данным.

Определение таблицы

Для того чтобы работать с таблицей в SQLAlchemy Core, её необходимо сначала определить. Это делается с использованием класса Table.

from sqlalchemy import create_engine, MetaData, Table, Column, Integer, String

# Создаем метаданные и движок
metadata = MetaData()
engine = create_engine('sqlite:///mydatabase.db')

# Определяем таблицу
users = Table('users', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String),
    Column('age', Integer)
)

В приведенном выше примере определяется таблица users с тремя столбцами: id, name и age.

Столбцы и типы данных

Столбцы в таблице определяются с помощью объекта Column, который принимает имя столбца, тип данных и дополнительные аргументы, такие как ограничения.

from sqlalchemy import Float, DateTime, Text

articles = Table('articles', metadata,
    Column('id', Integer, primary_key=True),
    Column('title', String(100)),
    Column('content', Text),
    Column('rating', Float),
    Column('published_at', DateTime)
)

Основные типы данных:

  • Integer: Целочисленный тип данных. Подходит для хранения целых чисел.
Column('user_id', Integer)
  • String: Строка переменной длины. Можно указать максимальную длину.
Column('username', String(15))  # строка максимальной длиной в 15 символов
  • Text: Строка для хранения больших текстовых блоков. Без ограничения длины.
Column('description', Text)
  • DateTime: Тип данных для хранения даты и времени.
from sqlalchemy import DateTime

Column('created_at', DateTime)
  • Float: Тип данных для хранения чисел с плавающей точкой.
Column('rating', Float)
  • Boolean: Тип данных для хранения логических значений True или False.
from sqlalchemy import Boolean

Column('is_active', Boolean)

SQLAlchemy поддерживает множество других типов данных, таких как:

  • Date: Только для хранения даты (без времени).
  • Time: Только для хранения времени (без даты).
  • LargeBinary: Для хранения двоичных данных.
  • Unicode: Строковый тип для хранения символов Unicode.
  • Enum: Для хранения одного из предварительно определенных значений.

Ограничения и атрибуты столбцов

При проектировании структуры базы данных особое внимание следует уделять ограничениям и атрибутам столбцов, так как они играют важную роль в обеспечении целостности данных. SQLAlchemy Core предоставляет ряд инструментов для этой цели.

  • Primary Key (primary_key) - первичный ключ используется для уникальной идентификации каждой записи в таблице. В таблице может быть только один первичный ключ, который может состоять из одного или нескольких столбцов.
Column('id', Integer, primary_key=True)
  • Unique (unique) - ограничение unique гарантирует, что все значения в столбце уникальны.
Column('email', String(100), unique=True)
  • Nullable (nullable) - атрибут nullable определяет, может ли столбец содержать значения NULL. Если nullable=False, то столбец не может содержать значение NULL.
Column('username', String(50), nullable=False)
  • Default (default) - атрибут default устанавливает значение по умолчанию для столбца. Это значение будет автоматически присвоено столбцу, если при вставке строки значение для этого столбца не указано.
from datetime import datetime

Column('created_at', DateTime, default=datetime.utcnow)
  • Index (index) - атрибут index указывает, что для данного столбца следует создать индекс. Индексы ускоряют операции поиска и извлечения данных.
Column('last_name', String(50), index=True)
  • Auto Increment (autoincrement) - для столбцов с типом данных Integer атрибут autoincrement устанавливает автоматическое увеличение значения столбца. Это часто используется вместе с primary_key.
Column('id', Integer, primary_key=True, autoincrement=True)
  • Check (Check) - ограничение Check позволяет определить условие, которому должны соответствовать значения столбца.
from sqlalchemy import CheckConstraint

Column('age', Integer, CheckConstraint('age>=0'))

Заключение

Определение таблиц и столбцов - это основа работы с базами данных в SQLAlchemy Core. Освоив эти концепции, вы получите мощный инструмент для создания, изменения и взаимодействия со схемами баз данных.

В следующих статьях мы рассмотрим, как выполнять запросы с использованием SQLAlchemy Core, а также более продвинутые темы, такие как индексы, связи и транзакции.

Содержание: