2017-04-17 12 views
1

私はSQLAlchemyの経験がない、と私は、次のコードを持っている:私はthisをチェックしてsqlalchemyを使用する場合、__table_args__の目的は何ですか?

class ForecastBedSetting(Base): 
    __tablename__ = 'forecast_bed_settings' 
    __table_args__ = (
     Index('idx_forecast_bed_settings_forecast_id_property_id_beds', 
       'forecast_id', 'property_id', 
       'beds'), 
    ) 

    forecast_id = Column(ForeignKey(u'forecasts.id'), nullable=False) 
    property_id = Column(ForeignKey(u'properties.id'), nullable=False, index=True) 
    # more definition of columns 

が、私は__table_args__の目的が何であるかを理解することはできませんので、私は、この行が何をしているか見当もつかない。

__table_args__ = (
    Index('idx_forecast_bed_settings_forecast_id_property_id_beds', 
    'forecast_id', 'property_id', 
    'beds'), 
) 

誰かが何が__table_args__の目的で、コードの前の部分が何をしているのか私に説明してくださいでした。

答えて

2

この属性は、通常、Tableコンストラクタに送信される位置とキーワードの両方の引数に対応します。宣言型モデルクラスの構築時に

からForecastBedSettingあなたのケースで - Basecreates an instance of Tableが付属していますメタクラス。 __table_args__属性を使用すると、余分な引数をTableに渡すことができます。作成されたテーブルが作成TableIndexインスタンスを渡し、コードdefines an index inline

ForecastBedSetting.__table__ 

介してアクセス可能です。インデックスは列を識別するために文字列名を使用するため、テーブルに渡されることなくSQLAlchemyはそのテーブルがどのテーブルに属しているかを知ることができませんでした。

+0

ありがとう – lmiguelvargasf

関連する問題