Атрибут primary_key класса Table
Атрибут primary_key класса Table возвращает объект
PrimaryKeyConstraint, который представляет первичный ключ
таблицы. Через этот объект можно получить доступ к столбцам,
входящим в первичный ключ, их количеству и именам. Атрибут
доступен только для чтения и формируется автоматически при
создании таблицы на основе параметра primary_key
у столбцов.
Синтаксис
table.primary_key
Пример
Давайте создадим таблицу с одним столбцом первичного ключа и выведем объект первичного ключа:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
print(articles.primary_key)
Результат выполнения кода:
"PrimaryKeyConstraint(Column('id', Integer(), table=<articles>, primary_key=True, nullable=False))"
Пример
Давайте получим список столбцов, входящих в первичный ключ:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
for column in articles.primary_key.columns:
print(column.name)
Результат выполнения кода:
"id"
Пример
Давайте создадим таблицу с составным первичным ключом из двух столбцов:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('num', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
print(len(articles.primary_key.columns))
Результат выполнения кода:
"2"
Пример
Давайте выведем имена всех столбцов составного первичного ключа через запятую:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('num', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
names = [column.name for column in articles.primary_key.columns]
print(', '.join(names))
Результат выполнения кода:
"id, num"
Пример
Давайте проверим, входит ли конкретный столбец в состав первичного ключа таблицы:
from sqlalchemy import Table, Column, Integer, String, MetaData
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
id_column = articles.c.id
title_column = articles.c.title
print(id_column in articles.primary_key.columns)
print(title_column in articles.primary_key.columns)
Результат выполнения кода:
"True"
"False"
Пример
Давайте посмотрим, как атрибут primary_key влияет на
SQL-запрос создания таблицы:
from sqlalchemy import Table, Column, Integer, String, MetaData
from sqlalchemy.schema import CreateTable
metadata = MetaData()
articles = Table(
'articles',
metadata,
Column('id', Integer, primary_key=True),
Column('title', String),
Column('text', String)
)
print(CreateTable(articles))
Итоговый SQL запрос:
CREATE TABLE articles (
id INTEGER NOT NULL,
title VARCHAR,
text VARCHAR,
PRIMARY KEY (id)
)
Смотрите также
-
класс
Table,
который представляет таблицу базы данных -
атрибут
columns,
который хранит коллекцию столбцов таблицы -
атрибут
constraints,
который содержит все ограничения таблицы -
атрибут
foreign_keys,
который хранит внешние ключи таблицы