2011-07-19 52 views
34

我只是想以編程方式確定SQLalchemy模型主鍵的名稱。如何獲取SQLAlchemy對象主鍵的名稱?

+5

如果該解決方案適用於你,這是完全可以接受的解決方案添加爲回答並標記爲「已回答」。這有助於人們在尋找未解答的問題時。 –

回答

35

如果使用SQLAlchemy版本0.8或更高版本,則應該使用runtime inspection API

如果模型類是User和唯一的主鍵是id

>>> from sqlalchemy.inspection import inspect 
>>> inspect(User).primary_key[0].name 
'id' 

如果模型類是User,有很多主鍵,使用SQLAlchemy的版本少

>>> from sqlalchemy.inspection import inspect 
>>> [key.name for key in inspect(User).primary_key] 
['id', 'name'] 

如果比0.8,你應該使用class_mapper()功能。

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

在這種情況下,inspect()功能和class_mapper()函數返回相同的對象,但使用inspect()更是面向未來的。

5

如果類是 「用戶」,並有1只主鍵,這樣做*:

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

*從問題中移動。

0

假設聲明模型類是User

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

或爲Membership具有複合主鍵

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