使用sqlalchemy,postgres和flask全文搜索后无法访问数据

时间:2019-10-08 13:22:42

标签: postgresql flask-sqlalchemy tsvector

我想使用postgres内置的全文本搜索功能来搜索我的postgres数据库。在我的应用程序中,我根据标题,内容和日期存储了一组帖子。 我想我可以使用tsvector搜索数据库,但是不能从结果中检索数据;即标题,内容和日期。有人可以帮我吗?

import json, sys
from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

from sqlalchemy.dialects import postgresql
from sqlalchemy.sql.expression import cast, func
from sqlalchemy import Index

def create_tsvector(*args):
    exp = args[0]
    for e in args[1:]:
        exp += ' ' + e
    return func.to_tsvector('english', exp)

app = Flask(__name__)
app.config['SECRET_KEY'] = 'some_key'
app.config["SQLALCHEMY_DATABASE_URI"] = 'postgresql:somedb'

db = SQLAlchemy(app)

class Post(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.Text, nullable=False)
    content = db.Column(db.Text, nullable=False)
    date = db.Column(db.Text,unique=False)

    __ts_vector__ = create_tsvector(
        cast(func.coalesce(content, ''), postgresql.TEXT)
    )

    __table_args__ = (Index('idx_post_fts', __ts_vector__, postgresql_using='gin'), )


    def __repr__(self):
        return f"Post('{self.title}', '{self.date}')"


if len(sys.argv) > 1:
    filename1 = sys.argv[1]

infile=open(filename1,'r')
posts=json.load(infile)
infile.close()
List=list(posts)

art = 0
for j in range(0,len(List)):
    if j % 10 == 0:
        print(j)
    title= posts[List[art]]['Title']
    date = posts[List[art]]['Posted']
    content=posts[List[art]]['Text']
    post = Post(title=title, date=date, content=content)
    db.session.add(post)
    db.session.commit()
    art+=1


from sqlalchemy.dialects.postgresql import TSVECTOR
from sqlalchemy import select, cast

posts = Post.__ts_vector__.match("bicycle", postgresql_regconfig='english')

print(posts)

0 个答案:

没有答案