Атрибут primary_key
Атрибут primary_key класса Column определяет,
является ли данный столбец частью первичного ключа таблицы.
Принимает булево значение: True или False.
По умолчанию равен False. Если хотя бы один столбец
в таблице имеет primary_key=True, SQLAlchemy создаст
первичный ключ при генерации схемы. При использовании
декларативных моделей с mapped_column атрибут
primary_key также отмечает столбец как ключевой.
Синтаксис
Column(primary_key=False)
Пример
Давайте создадим таблицу с одним столбцом-первичным ключом и проверим значение атрибута:
from sqlalchemy import Table, Column, Integer, MetaData, String
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
print(articles.c.id.primary_key)
print(articles.c.title.primary_key)
Результат выполнения кода:
True
False
Пример
Давайте создадим составной первичный ключ из двух столбцов:
from sqlalchemy import Table, Column, Integer, MetaData, String
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('num', Integer, primary_key=True),
Column('title', String),
)
for column in articles.primary_key:
print(column.name, column.primary_key)
Результат выполнения кода:
id True
num True
Пример
Давайте используем атрибут primary_key
в декларативной модели:
from sqlalchemy import String, Integer
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Article(Base):
__tablename__ = 'articles'
id: Mapped[int] = mapped_column(primary_key=True)
title: Mapped[str] = mapped_column(String)
text: Mapped[str] = mapped_column(String)
print(Article.__table__.c.id.primary_key)
print(Article.__table__.c.title.primary_key)
Результат выполнения кода:
True
False
Пример
Давайте посмотрим, как выглядит SQL-запрос при создании таблицы с первичным ключом:
from sqlalchemy import Table, Column, Integer, String, MetaData
from sqlalchemy.schema import CreateTable
from sqlalchemy.dialects import sqlite
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
)
print(CreateTable(articles).compile(dialect=sqlite.dialect()))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR,
PRIMARY KEY (id)
)
Смотрите также
-
класс
Column,
который представляет столбец таблицы -
атрибут
autoincrement,
который управляет автоинкрементом первичного ключа -
атрибут
table,
который возвращает таблицу столбца -
атрибут
nullable,
который указывает на допустимость NULL