【问题标题】:Search in a string literal with a table field with peewee ORM使用 peewee ORM 在带有表字段的字符串文字中搜索
【发布时间】:2021-08-10 02:32:05
【问题描述】:

我正在尝试查找某个字段与作为固定参数提供的字符串文字的开头匹配的所有记录。 needle 是表格中的一个字段。

示例:给定一个参数“John Doe”,我想获取表用户的所有记录,其中 first_name 字段是该“John Doe”字符串开头的子字符串(例如匹配记录将是那些名字为“John”、“Jo”或“Joh”等的人。

看来我可以使用以下 SQL 实现这一点:

SELECT * FROM user WHERE 'John Doe' LIKE first_name || '%'

现在如何将它翻译成 peewee?奇怪的是,我实际上能够为此获得正确的 SQL,但由于某种原因,当我通过 SQLite 命令行直接输入相同的查询时,peewee 返回一个空结果。

User.select().where(SQL("'John Doe'").startswith(User.first_name))

当我检查 sql() 时,它显示:

('SELECT "t1"."id", "t1"."first_name" FROM "user" AS "t1" WHERE ("John Doe" LIKE ("t1"."first_name" || ?))', ['%'])

但是结果是空的。命令行中的相同 SQL 返回正确的记录...我做错了什么?

【问题讨论】:

    标签: python sql sqlite orm peewee


    【解决方案1】:

    我会这样写:

    User.select().where(Value('John Doe') ** (User.first_name + '%'))
    

    求幂重载转换为不区分大小写的 LIKE。

    【讨论】:

    • 谢谢!这个Value是我一直在寻找的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-09
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多