我想在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数据类型也有所不同?
我解决了以下问题:
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,否则会发生一些错误