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
没有人知道吗?😥
|
|
beeeeeeatApr 13, 2023 via iPhone
2
Field.__eq__
|
|
3
原理很简单 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 |
|
chaoshuiApr 14, 2023
4
大概率是运算符重载
|
|
5
|
|
6
原来如此 谢谢各位大佬!
|