Я просто хочу программно определить имя первичного ключа модели SQLalchemy.
Как получить имя первичного ключа объекта SQLAlchemy?
Ответ 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']