【发布时间】:2019-09-06 11:45:32
【问题描述】:
我正在跨两个表进行连接,设置非常简单,但是当我添加引用正在连接的表中的列的 contains 或 startswith 时,我永远无法获得结果。没有错误,但计数始终为 0,尽管我知道记录存在并且能够在原始 SQL 中编写等效查询并让它返回我期望的所有结果。
如下所示,假设 A 和 B 是表,它们通过外键关联,并且我在 where 子句中使用的两个字段都是 CharField。
尽管我期望这个版本不能工作:
(A.select().join(B).where(
A.some_column.contains(B.other_column)
))
但这确实按预期工作:
(A.select().join(B).where(
SQL("t1.some_column ILIKE '%%' || t2.other_column || '%%'")
))
我希望这两者是等价的,但事实并非如此。查看第一个 SQL 的输出 SQL,如下所示:
(SELECT "t1"."some_column" from "A" as "t1"
INNER JOIN "B" as "t2" ON ("t1"."b_id" = "t2"."id")
WHERE ("t1"."some_column" ILIKE %s)', ['%<CharField: B.other_column>%'])
对我而言,SQL 输出的有趣之处在于它引用了B.other_column。我猜如果是t2.other_column,那么查询会起作用,但我该如何让peewee 做到这一点?我已经尝试了所有我能想到的方法,但我无法找到一种纯粹的 ORM 方法来让它工作。
【问题讨论】: