AttributeError: у объекта 'BaseQuery' нет атрибута 'whoosh_search'
Я использую Flask
(python
), создавая whooshe
поиск, я выполнил все шаги из этой ссылки, также пытался из других ссылок, но каждый раз в конце я приходил к этой ошибке:
results = BlogPost.query.whoosh_search('cool')
AttributeError:'BaseQuery' object has no attribute 'whoosh_search'
Вот мой код модели:
class BlogPost(db.Model):
__tablename__ = 'blogpost'
__searchable__ = ['title', 'content']
__analyzer__ = StemmingAnalyzer()
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.Unicode) # Indexed fields are either String,
content = db.Column(db.Text) # Unicode, or Text
created = db.Column(db.DateTime, default=datetime.utcnow)
У меня ошибка по этому поводу:
@app.route('/search')
def search():
results = BlogPost.query.whoosh_search('cool')
return results
2 ответа
Я также видел эту ошибку. Затем я обнаружил, что ошибка находится в models.py. Вы должны добавить whooshalchemy.whoosh_index(app, BlogPost)
в конце кода модели.
Я сталкивался с подобной проблемой, если кто-то падал в эту кроличью нору.
В моем случае я обнаружил, что в моем
models.py
Я импортировал из sqlalchemy и использовал declarative_base в качестве основы для каждой модели. то есть:
from sqlalchemy import Column, Integer, DateTime, Text, Boolean
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class Book(Base):
в то время как в моем
routes.py
Я импортировал
flask-sqlalchemy
где вы используете db.Model в качестве основы:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db.init_app(app)
class Book(db.Model):
Были некоторые похожие ответы и на некоторые другие сообщения, но похоже, что при использовании flask-whooshalchemy или его аналогичных вариантов (whooshalchemy3, whooshalchemyplus) с использованием db.Model в качестве основы - это правильный способ инициализации модели для получения соответствующих атрибутов .
надеюсь, это поможет кому-то в будущем.