我试图在烧瓶应用上使用搜索功能。它似乎正在保存在数据库中,但查询并没有给我任何回报。
数据库模型:
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的名称,它并没有给我任何回报。 所以搜索功能并没有按预期工作。
答案 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)的一部分。