【发布时间】:2011-07-19 09:43:41
【问题描述】:
我只想以编程方式确定 SQLalchemy 模型主键的名称。
【问题讨论】:
-
如果此解决方案适合您,则将您的解决方案添加为答案并将其标记为“已回答”是完全可以接受的。这有助于人们寻找未解决的问题。
标签: sqlalchemy
我只想以编程方式确定 SQLalchemy 模型主键的名称。
【问题讨论】:
标签: sqlalchemy
如果使用 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() 更具前瞻性。
【讨论】:
get_property_by_column,可以用来访问主键中列对应的ColumnProperty对象。 ColumnProperty 反过来让你访问key,属性的名称,class_attribute 访问类InstrumentedAttribute 等。
如果类是“用户”,并且只有 1 个主键,请执行此操作*:
User.__mapper__.primary_key._list[0].name
*从问题中移开。
【讨论】:
[k.name for k in User.__mapper__.primary_key]
假设声明性模型类是User,
>>> list(User.__table__.primary_key)[0].name
'id'
或者对于具有复合主键的Membership
>>> [pk.name for pk in Membership.__table__.primary_key]
['user_id', 'group_id']
【讨论】: