简体   繁体   中英

Postgresql Sqlalchemy dynamic table partition creation issue

I'm using postgresql and python sqllachmey for creating the partitioned table. Below is the example code.

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)

The above code creates a paritioned table and i'm creating the partitions using pg_partman extension.

Now, my need is that I want to use the class 'Students' for creating the student table under different databases, and some databases don't need the partitioned table. How can I make the above code dynamic so that I can take out 'postgresql_partition_by' from table_args ?

According to the documents, it looks like, I have to use dictionary for table column definition but I'm not quite sure about it.

The keyword arguemnts of Table (or __table_args__ ) are dialect specific, so your postgresql_partition_by will only be used with postgresql dialects, not sqlite or others.

class sqlalchemy.schema.Table(*args, **kw)

[...]

**kw – Additional keyword arguments not mentioned above are dialect specific, and passed in the form <dialectname>_<argname> . See the documentation regarding an individual dialect at Dialects for detail on documented arguments.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM