我没有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__
的目的是什么,以及上一段代码正在做什么。
答案 0 :(得分:2)
此属性适用于通常发送到
Table
构造函数的位置和关键字参数。
在构建声明性模型类时 - 在您的情况下为ForecastBedSetting
- Base
creates an instance of Table
附带的元类。 __table_args__
属性允许将额外的参数传递给Table
。创建的表可通过
ForecastBedSetting.__table__
代码defines an index inline,将Index
实例传递给创建的Table
。索引使用字符串名来标识列,因此不会传递给表,SQLAlchemy无法知道它属于哪个表。