
from sqlalchemy import select stmt = select(User).where(User.name == "spongebob") 例如以上代码中 User.name == "spongebob" 会被解释成表达式参数,而不是我理解的变成一个布尔值(True or False)参数
是怎么做到的,这是 python 本身支持的语法吗? 总觉得很误导,像是 bug 一样
1 think2011 OP 没有人知道吗? |
2 beeeeeeat 2023-04-13 20:13:45 +08:00 via iPhone Field.__eq__ |
3 Alias4ck 2023-04-14 11:29:43 +08:00 原理很简单 sqlalchemy 对 column 重写了 operator 的运算符方法 https://imgur.com/a/yJVtnmC 生成了一个 sqlalchemy.sql.elements.BinaryExpression 对象 具体翻代码 debug 去吧 1:https://github.com/sqlalchemy/sqlalchemy/blob/d1b1ca04323ba3f294c910b8d94153f307370651/lib/sqlalchemy/sql/operators.py#L532 2:https://github.com/sqlalchemy/sqlalchemy/blob/d1b1ca04323ba3f294c910b8d94153f307370651/lib/sqlalchemy/sql/elements.py#L1466 |
4 chaoshui 2023-04-14 11:34:01 +08:00 大概率是运算符重载 |
5 Pzqqt 2023-04-14 12:47:54 +08:00 |
6 think2011 OP 原来如此 谢谢各位大佬! |