【发布时间】: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 作为记录,如上面的代码所示,但它似乎对我不起作用。 上面的打印语句打印以下内容: 结果:[] [main.Article 对象位于 0x7f9d4351bf90>,main.Article 对象位于 0x7f9d4342d090>,main.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