sqlalchemy 中 __table_args__ 的目的是什么?

lmi*_*asf 6 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
Run Code Online (Sandbox Code Playgroud)

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

__table_args__ = (
    Index('idx_forecast_bed_settings_forecast_id_property_id_beds',
    'forecast_id', 'property_id',
    'beds'),
)
Run Code Online (Sandbox Code Playgroud)

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

Ilj*_*ilä 5

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

在构建声明性模型类期间 -ForecastBedSetting在您的情况下 - 附带的元类Base 创建Table. 该__table_args__属性允许向那个传递额外的参数Table。创建的表可以通过

ForecastBedSetting.__table__
Run Code Online (Sandbox Code Playgroud)

代码定义了一个内联索引,将Index实例传递给 created Table。索引使用字符串名称来标识列,因此如果没有传递给表,SQLAlchemy 无法知道它属于哪个表。