Метод get_columns класса Inspector
Метод get_columns класса Inspector
возвращает информацию о колонках указанной
таблицы. Первым параметром метод принимает
имя таблицы. Вторым необязательным параметром
передается имя схемы. Метод возвращает список
словарей, каждый из которых описывает одну
колонку: имя, тип, признак nullable,
значение по умолчанию и другие атрибуты.
Синтаксис
inspector.get_columns(table_name, [schema])
Пример
Давайте создадим таблицу articles
и получим описание ее колонок:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('''
CREATE TABLE articles (
id INTEGER PRIMARY KEY,
title VARCHAR(100) NOT NULL,
text TEXT
)
'''))
conn.commit()
inspector = inspect(engine)
res = inspector.get_columns('articles')
for column in res:
print(column['name'], column['type'], column['nullable'])
Результат выполнения кода:
"id INTEGER False"
"title VARCHAR(100) False"
"text TEXT True"
Пример
Давайте выведем полное описание каждой колонки, включая значение по умолчанию и первичный ключ:
from sqlalchemy import create_engine, inspect, text
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
conn.execute(text('''
CREATE TABLE articles (
id INTEGER PRIMARY KEY,
title VARCHAR(100) NOT NULL,
status VARCHAR(20) DEFAULT 'draft'
)
'''))
conn.commit()
inspector = inspect(engine)
res = inspector.get_columns('articles')
for column in res:
print(column)
Результат выполнения кода:
{'name': 'id', 'type': INTEGER(), 'nullable': False, 'default': None, 'autoincrement': 'auto', 'primary_key': 1}
{'name': 'title', 'type': VARCHAR(length=100), 'nullable': False, 'default': None, 'autoincrement': 'auto', 'primary_key': 0}
{'name': 'status', 'type': VARCHAR(length=20), 'nullable': True, 'default': "'draft'", 'autoincrement': 'auto', 'primary_key': 0}
Пример
Давайте получим колонки таблицы, созданной через ORM-модель:
from sqlalchemy import create_engine, inspect
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]
num: Mapped[int]
engine = create_engine('sqlite:///:memory:')
Base.metadata.create_all(engine)
inspector = inspect(engine)
res = inspector.get_columns('articles')
for column in res:
print(column['name'], column['type'], column['nullable'])
Результат выполнения кода:
"id INTEGER False"
"title VARCHAR False"
"num INTEGER False"
Смотрите также
-
класс
Inspector,
который предоставляет доступ к метаданным базы -
метод
get_table_names,
который возвращает список таблиц базы -
метод
get_pk_constraint,
который возвращает информацию о первичном ключе -
метод
get_foreign_keys,
который возвращает информацию о внешних ключах