sqlalchemy中__table_args__的目的是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlalchemy中__table_args__的目的是什么?相关的知识,希望对你有一定的参考价值。

我没有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__的目的是什么,以及之前的代码是做什么的。

答案

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

在构造一个声明性模型类 - 在你的情况下ForecastBedSetting - Base creates an instance of Table附带的元类。 __table_args__属性允许将额外的参数传递给Table。创建的表可通过以下方式访问

ForecastBedSetting.__table__

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

以上是关于sqlalchemy中__table_args__的目的是什么?的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQLAlchemy、SQLite 和 Postgresql 架构限定表?

尝试使用 SQLAlchemy 将数据插入雪花数据库表

python flask-sqlalchemy如何设置使自动建的mysql表字符集charset为utf8

如何使用 create_all() 跨文件的 sqlalchemy orm 对象

让 SQLAlchemy 在 create_all 上发布 CREATE SCHEMA

SQLAlchemy - 根据方言以不同方式编译索引