Flask Sqlachemy make_searchable并未返回任何结果

时间:2018-02-21 01:46:08

标签: python postgresql flask flask-sqlalchemy

我试图在烧瓶应用上使用搜索功能。它似乎正在保存在数据库中,但查询并没有给我任何回报。

数据库模型:

app = Flask(__name__)
csrf = CsrfProtect(app)
csrf.init_app(app)

db = SQLAlchemy(app)

class ArticleQuery(BaseQuery, SearchQueryMixin):
    pass


class latest_movies_scraper(db.Model):
    query_class = ArticleQuery
    __tablename__ = 'latest_movies_scraper'
    id = db.Column(sa.Integer, primary_key=True)
    name = db.Column(db.Unicode(255))
    url = db.Column(db.Unicode(255))
    image_url = db.Column(db.Unicode(255))
    create = db.Column(db.DateTime, default=datetime.datetime.utcnow)
    search_vector = db.Column(TSVectorType('name'))

我如何保存到数据库:

check_if_exists = latest_movies_scraper.query.filter_by(name=dictionary['title']).first()

                    if check_if_exists:
                        print check_if_exists.name
                        print 'skipping this...'
                        pass
                    else:

                        insert_to_db = latest_movies_scraper(name=dictionary['title'], url=dictionary['href'], image_url=dictionary['featured_image'])
                        db.session.add(insert_to_db)
                        db.session.commit()

我如何使用搜索功能:

name = latest_movies_scraper.query.search(u'Black Panther (2018)').limit(5).all()

Name返回空数组,但它应该返回名字列表。

ABOVE MY GOAL是从数据库中查询名称。事实上我的数据库中存在Black Panther 2018的名称,它并没有给我任何回报。 所以搜索功能并没有按预期工作。

1 个答案:

答案 0 :(得分:1)

SQLAlchemy-Searchable不会对现有数据编制索引。这必须通过执行同步手动完成。对于上面的表定义,下面的代码就足够了:

from sqlalchemy_searchable import sync_trigger

def sync_fts():
    sync_trigger(db.engine, 'latest_movies_scraper', 'search_vector', ['name'])

此代码通常是数据库管理工具(Flask-Script,Click)的一部分。