如何获取 SQLAlchemy 对象的主键的名称?



我只想通过编程确定SQLalchemy模型的主键的名称。

如果使用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()更具有后防性。

如果class是"User",并且只有一个主键,执行*:

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

<一口> * <子>从这个问题。

假设声明性模型类为User

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

或者对于有复合主键

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

最新更新