sqlalchemy中__table_args__的目的是什么?

时间:2017-04-17 16:11:42

标签: python sqlalchemy

我没有sqlalchemy的经验,我有以下代码:

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

虽然我已经检查了this,但我无法理解__table_args__的目的是什么,所以我不知道这条线在做什么:

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

有人可以解释一下__table_args__的目的是什么,以及上一段代码正在做什么。

1 个答案:

答案 0 :(得分:2)

  

此属性适用于通常发送到Table构造函数的位置和关键字参数。

在构建声明性模型类时 - 在您的情况下为ForecastBedSetting - Base creates an instance of Table附带的元类。 __table_args__属性允许将额外的参数传递给Table。创建的表可通过

访问
ForecastBedSetting.__table__

代码defines an index inline,将Index实例传递给创建的Table。索引使用字符串名来标识列,因此不会传递给表,SQLAlchemy无法知道它属于哪个表。