【问题标题】:Flask, Python, SQLalchemy, SQLalchemy-searchable doesn't return matching textFlask、Python、SQLalchemy、SQLalchemy-searchable 不返回匹配文本
【发布时间】:2015-04-06 16:15:02
【问题描述】:

我正在用 Python 编写一个基于 Flask、SQLalchemy、postgresql 的 Web 应用程序。我已经创建了一个数据库并正在尝试实现一个搜索工具。 我首先提到https://sqlalchemy-searchable.readthedocs.org/en/latest/installation.html#quickstart 并尝试了那里给出的示例。对 search() 的调用总是返回 None。 当我在 stackoverflow 上搜索类似问题时,我在 Flask-Sqlalchemy + Sqlalchemy-searchable returning empty list 找到了完全相同的问题。 因此,我逐字复制并粘贴了该代码(进行了一些相关更改),但搜索查询返回 None 似乎仍然存在问题。代码如下:

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy, BaseQuery
from sqlalchemy_searchable import SearchQueryMixin
from sqlalchemy_utils.types import TSVectorType
from sqlalchemy_searchable import make_searchable

app = Flask(__name__)
#app.config['SQLALCHEMY_DATABASE_URI'] =    'postgresql+psycopg2://usr:admin@localhost/dev'
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgres:///dbuser_db1'
#app.config['SECRET_KEY'] = 'notreallyasecret'
db = SQLAlchemy(app)
make_searchable()


class ArticleQuery(BaseQuery, SearchQueryMixin):
    pass


class Article(db.Model):
    query_class = ArticleQuery
    __tablename__ = 'article'

    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.Unicode(255))
    content = db.Column(db.UnicodeText)
    search_vector = db.Column(TSVectorType('name', 'content'))

def test_db():
    article1 = Article(name=u'finland', content=u'finland')

    db.session.add(article1)
    db.session.commit()

    result1 = Article.query.search(u'finland').limit(5).all()
    result_blank = Article.query.search(u'').limit(5).all()
    result = Article.query.search(u'finland').first()
    print "RESULT: ", result1, result_blank, result


if __name__ == "__main__":
    test_db()

根据上述 stackoverflow 链接 (Flask-Sqlalchemy + Sqlalchemy-searchable returning empty list) 中的对话,提出问题的人说,当他/她使用 unicode 值重新实例化记录时,搜索查询开始工作。就我而言,我总是使用 unicode 作为记录,如上面的代码所示,但它似乎对我不起作用。 上面的打印语句打印以下内容: 结果:[] [ma​​in.Article 对象位于 0x7f9d4351bf90>,ma​​in.Article 对象位于 0x7f9d4342d090>,ma​​in.Article 对象位于0x7f9d434ae550>] 无

另外,根据引用问题发起人的观察,我也看到在文章表中,'search_vector tsvector' 列完全为空,即使内容和名称列中有数据。不确定这是否是根本原因。我想知道他/她是否能够在搜索查询开始工作后看到填充的 search_vector 列。

dbuser_db1=> SELECT article.id AS article_id, article.name AS article_name, article.content AS article_content, article.search_vector AS article_search_vector FROM文章 ;

article_id |文章名称 |文章内容 | article_search_vector

------------+--------------+-----------------+- ----------------------

    127 | finland      | finland         | 
    128 | finland      | finland         | 
    129 | finland      | finland         | 

(3 行)

感谢您的帮助。

【问题讨论】:

    标签: python postgresql flask-sqlalchemy


    【解决方案1】:

    我想知道您是否需要通过为模型指定 init 方法来初始化新条目。 “名称”和“内容”kwargs 来自哪里?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-19
      • 1970-01-01
      • 2015-03-25
      • 1970-01-01
      • 2017-08-23
      • 1970-01-01
      • 2021-02-26
      相关资源
      最近更新 更多