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 1
原理很简单 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 1
|
6
think2011 OP 原来如此 谢谢各位大佬!
|