【发布时间】:2012-09-07 06:10:48
【问题描述】:
我正在使用 SQLAlchemy 在 Flask 上构建一个界面,其中一部分是搜索 API。本质上,一个预先输入的输入是用它的值(例如电子邮件)调用服务器,然后服务器在下面的过滤器中使用 .like 执行 SQLalchemy 查询
q = session.query(User).filter(User.email.like('%'+term+'%')).all()
这个查询并没有真正返回任何有用的东西,在前几个字符之后,什么也没有。但是,如果我使用硬编码术语执行相同的查询,如下所示:
q = session.query(User).filter(User.email.like('%mysearchterm%')).all()
它会很好地返回结果,所以我将术语放入 like() 方法中有些问题,但我真的无法弄清楚问题是什么。该术语来自 ajax POST 并且值存在于服务器端,只是 .like() 没有正确使用它。
“无用”是指返回的第一组结果与输入的实际术语无关,在长度高于 3-4 的术语之后,尽管存在匹配项,但没有返回结果数据库。
非常感谢任何帮助。
【问题讨论】:
-
您确定该术语是您所期望的吗?如果您在变量中创建类似字符串 '%'+term+'%' 并打印该变量,您是否得到了预期的结果?另外,“这个查询并没有真正返回任何有用的东西”是什么意思?最后,考虑turning on logging 并查看实际生成的 SQL 是什么。
-
在我的烧瓶应用程序中的方法中,我在执行查询之前打印了术语,我可以在控制台中看到该术语弹出,因此该术语正在进入函数中。我刚刚尝试了 print '%'+term'%' ,它也在控制台中输出了 %myterm% 。不是真的有用是指返回的第一组结果与术语无关,在大约 3-4 个字符之后,没有返回任何结果。
标签: sql ajax sqlalchemy flask sql-like