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

时间:2011-07-19 09:43:42

标签: sqlalchemy

我只想以编程方式确定SQLalchemy模型主键的名称。

3 个答案:

答案 0 :(得分:46)

如果使用SQLAlchemy版本0.8或更高版本,则应使用runtime inspection 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']

如果使用小于0.8的SQLAlchemy版本,则应使用class_mapper()函数。

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

在这种情况下,inspect()函数和class_mapper()函数返回相同的对象,但使用inspect()更能面向未来。

答案 1 :(得分:6)

如果class是“User”,并且只有一个主键,请执行以下操作*:

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

* 移出问题。

答案 2 :(得分:-1)

假设声明性模型类是User

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

或者对于具有复合主键的Membership

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