Подтвердить что ты не робот

Как получить имя первичного ключа объекта SQLAlchemy?

Я просто хочу программно определить имя первичного ключа модели SQLalchemy.

4b9b3361

Ответ 1

Если вы используете SQLAlchemy версии 0.8 или новее, вы должны использовать API проверки выполнения во время выполнения.

Если класс модели User, а единственный первичный ключ - id,

>>> from sqlalchemy.inspection import inspect
>>> inspect(User).primary_key[0].name
'id'

Если класс модели User и существует много первичных ключей,

>>> from sqlalchemy.inspection import inspect
>>> [key.name for key in inspect(User).primary_key]
['id', 'name']

Если используется версия SQLAlchemy менее 0,8, вы должны использовать функцию class_mapper().

>>> from sqlalchemy.orm import class_mapper
>>> class_mapper(User).primary_key[0].name
'id'

В этом случае функция inspect() и функция class_mapper() возвращают один и тот же объект, но использование inspect() более надежное будущее.

Ответ 2

Если класс является "Пользователь", и есть только 1 первичный ключ, сделайте это *:

User.__mapper__.primary_key._list[0].name

* Перемещено из вопроса.

Ответ 3

Предполагая, что класс декларативной модели User,

>>> list(User.__table__.primary_key)[0].name
'id'

Или для Membership, который имеет составной первичный ключ

>>> [pk.name for pk in Membership.__table__.primary_key]
['user_id', 'group_id']