from sqlalchemy import select
stmt = select(User).where(User.name == "spongebob")
例如以上代码中 User.name == "spongebob" 会被解释成表达式参数,而不是我理解的变成一个布尔值(True or False)参数
是怎么做到的,这是 python 本身支持的语法吗? 总觉得很误导,像是 bug 一样
from sqlalchemy import select
stmt = select(User).where(User.name == "spongebob")
例如以上代码中 User.name == "spongebob" 会被解释成表达式参数,而不是我理解的变成一个布尔值(True or False)参数
是怎么做到的,这是 python 本身支持的语法吗? 总觉得很误导,像是 bug 一样
1
think2011 OP 没有人知道吗?😥
|
2
beeeeeeat Apr 13, 2023 via iPhone
Field.__eq__
|
3
Alias4ck Apr 14, 2023 原理很简单 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 Apr 14, 2023
大概率是运算符重载
|
5
Pzqqt Apr 14, 2023 |
6
think2011 OP 原来如此 谢谢各位大佬!
|