如何获取SQLAlchemy对象的名称';什么是主键?

如何获取SQLAlchemy对象的名称';什么是主键?,sqlalchemy,Sqlalchemy,我只想通过编程确定SQLalchemy模型主键的名称。如果类是“User”,并且只有一个主键,请执行此操作*: User.__mapper__.primary_key._list[0].name *离开问题。如果使用SQLAlchemy 0.8或更高版本,则应使用 如果模型类为User,且唯一主键为id >>> from sqlalchemy.inspection import inspect >>> inspect(User).primary_key[0

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

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

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


*离开问题。

如果使用SQLAlchemy 0.8或更高版本,则应使用

如果模型类为
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\u mapper()
函数

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

在这种情况下,
inspect()
函数和
class\u mapper()
函数返回相同的对象,但是使用
inspect()
更能证明将来的情况。

假设声明性模型类是
User

>>> list(User.__table__.primary_key)[0].name
'id'
或者对于具有复合主键的
成员资格

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

如果此解决方案适合您,则完全可以将您的解决方案添加为答案并将其标记为“已回答”。这有助于人们寻找未回答的问题。或者,如果您需要所有主键,您可以执行上面所述的列表理解:
[k.name for k in User.\uu映射器\uuuuuuuu.primary\u key]
不确定为什么在工作时会投反对票。