sqlachemy 查询方法如何工作?

Car*_*Lee 3 python syntax sqlalchemy

我正在学习 sqlachemy,我对 Python 比较陌生。

当我阅读它的文档时,我看到了这种用法,例如:

查询过滤器(用户名 == 'ed')

Python 不会评估表达式User.name == 'ed',然后将结果(布尔值)传递给query.filter方法吗?

这种语法是如何工作的?Python 是否支持某种运算符覆盖,如 C++?

Mar*_*ers 5

SQLAlchemy 使用各种特殊的方法挂钩来重载运算符行为。

对于==,该__eq__()方法在编译时返回表示 SQL 表达式的特殊对象。引用有关“丰富比较”挂钩的文档:

按照惯例,FalseTrue返回以进行成功的比较。然而,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if语句的条件中),Python 将调用bool()该值以确定结果是真还是假。

请参阅SQLAlchemy 源代码中的ColumnOperators以了解实现的特定钩子。