2011-07-19 10 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'] 
関連する問題