我有一个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以生成这些索引的命令的任何想法?