Как получить имя первичного ключа объекта SQLAlchemy? - PullRequest
41 голосов
/ 19 июля 2011

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

Ответы [ 3 ]

47 голосов
/ 15 мая 2012

Если используется 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() более перспективно для будущего.

6 голосов
/ 29 декабря 2011

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

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

* Снято с вопроса.

0 голосов
/ 09 ноября 2017

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

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

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

>>> [pk.name for pk in Membership.__table__.primary_key]
['user_id', 'group_id']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...