【问题标题】:How are strings passed to SQLAlchemy's .like() method字符串如何传递给 SQLAlchemy 的 .like() 方法
【发布时间】: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


【解决方案1】:

问题已解决。该查询位于一个更大的查询构建器函数中,该函数稍后在该函数中对查询应用了限制和偏移量,因为限制和偏移量高于返回结果集为空的结果数量。

这可能会导致严重的人为错误和睡眠不足。

【讨论】:

    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-20
    • 2021-09-25
    相关资源
    最近更新 更多