Postgresql Sqlalchemy动态表分区创建问题

rta7y2nd  于 2023-01-25  发布在  PostgreSQL
关注(0)|答案(1)|浏览(180)

我使用postgresql和python sqlachmey来创建分区表,下面是示例代码。

from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.types import Text
Base = declarative_base()
class Students(Base):
    __tablename__ = "Students"

    id = Column(Text, primary_key=True)
    name = Column(Text)
    type = Column(Text)
    desc = Column(Text)
    creation_time = Column(DateTime, default=func.now(), nullable=False, primary_key=True)
    __table_args__ = {
        'postgresql_partition_by': 'RANGE (creation_time)'
    }
table_list = [Students.__table__]
Base.metadata.create_all(self.engine, tables=table_list)

上面的代码创建了一个分区表,我使用pg_partman扩展创建分区。
现在,我需要使用类'Students'在不同的数据库下创建student表,而有些数据库不需要分区表,我如何使上面的代码动态化,以便从table_args中取出'postgresql_partition_by'?
根据文档,看起来,我必须使用字典来定义表列,但我不太确定。

bksxznpy

bksxznpy1#

Table(或__table_args__)的关键字参数是特定于方言的,因此您的postgresql_partition_by将仅用于postgresql方言,而不是sqlite或其他方言。

类SQL炼金术.架构.表(* 参数,**kw)

[...]

    • kw-上面没有提到的其他关键字参数是特定于方言的,并且以<dialectname>_<argname>的形式传递。有关文档参数的详细信息,请参见Dialects中有关各个方言的文档。

相关问题