我想在postgre表
上执行大量查询以按标签过滤from sqlalchemy.dialects.postgresql import ARRAY
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
tags = db.Column(ARRAY(db.String))
This link建议将标签存储为带有GIN索引的文本数组。
如何在上表中添加GIN索引?我是否使用String
vs Text
数据类型?
答案 0 :(得分:15)
我通过以下方式解决了这个问题:
from sqlalchemy.dialects.postgresql import ARRAY, array
class Post(db.Model):
__tablename__ = 'post'
id = db.Column(db.Integer, primary_key=True)
tags = db.Column(ARRAY(db.Text), nullable=False, default=db.cast(array([], type_=db.Text), ARRAY(db.Text)))
__table_args__ = (db.Index('ix_post_tags', tags, postgresql_using="gin"), )
简单地通过
查询db.session.query(Post).filter(Post.tags.contains([tag]))
必须将数组类型保持为Text
而不是String
,否则会发生一些错误