SQLAlchemy声明性映射器中的JSONB字段索引

时间:2016-08-28 11:47:53

标签: python json postgresql sqlalchemy

我有一个Postgres表的模型,我想在JSONB列中的字段上添加索引。我尝试了一些不同的方法,但是无法使用alembic自动生成命令来基于声明性模型创建这些索引。

class Content(Base):
    """
    Model for storing content. Content can be of different types. 
    """
    __tablename__ = 'content'
    __table_args__ = (
        Index('ix_content_owner_id', text("owner->>'id'")),
        Index('ix_content_category_id', text("category->>'id'")),
        Index('ix_content_metadata_styles', text("meta->>'styles'")),
        Index('ix_content_metadata_spaces', text("meta->>'s    paces'")),
        Index('ix_content_metadata_colours', text("meta->>'colours'")),
        Index('ix_content_data_store', text("content_data->>'store'")),
        Index('ix_content_data_tags', text("content_data->>'tags'")),
    )

    id            = Column(Integer, primary_key=True, autoincrement=1)
    content_type  = Column(String(64), index=True, nullable=False)
    content_id    = Column(String(128), index=True, nullable=False)
    uploader      = Column(String(128), index=True, nullable=False)
    date_added    = Column(DateTime(timezone=True), index=True, nullable=False,
                       default=utcnow_with_tz)
    date_modified = Column(DateTime(timezone=True), index=True, nullable=False,
                       default=utcnow_with_tz, onupdate=utcnow_with_tz)
    owner         = Column(JSONB, nullable=False)
    category      = Column(JSONB, nullable=False, server_default="'{}'")
    meta          = Column(JSONB, nullable=False, server_default="'{}'")
    content_data  = Column(JSONB, nullable=False)
    relations     = Column(JSONB, nullable=False, server_default="'{}'")
    comments      = Column(JSONB, nullable=False, server_default="'{}'")
    status        = Column(Integer, index=True, nullable=False, server_default="0")
    public        = Column(Integer, index=True, nullable=False, server_default="1")

    __mapper_args__ = {
        'polymorphic_on': content_type,
        'polymorphic_identity': 'content',
    }

我发现这是一个解释如何通过core-api(https://groups.google.com/d/msg/sqlalchemy/3ws_6orlSDY/lxS2FZR9PA8J)执行此操作的线程。我已经使用该技术来声明__table_args__属性中的索引。索引使用文字文本语法column->>'field'

关于如何获取alembic以生成这些索引的命令的任何想法?

0 个答案:

没有答案