我只想以编程方式确定SQLalchemy模型主键的名称。
答案 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']