我正在学习 sqlachemy,我对 Python 比较陌生。
当我阅读它的文档时,我看到了这种用法,例如:
query.filter(User.name == 'ed')
Python不会评估表达式User.name == 'ed'
然后将结果(布尔值)传递给query.filter
方法吗?
这种语法是如何工作的?Python 是否支持某种类型的运算符覆盖,例如 C++?
我正在学习 sqlachemy,我对 Python 比较陌生。
当我阅读它的文档时,我看到了这种用法,例如:
query.filter(User.name == 'ed')
Python不会评估表达式User.name == 'ed'
然后将结果(布尔值)传递给query.filter
方法吗?
这种语法是如何工作的?Python 是否支持某种类型的运算符覆盖,例如 C++?
SQLAlchemy 使用各种特殊的方法挂钩来重载运算符行为。
对于==
,该__eq__()
方法返回编译时表示 SQL 表达式的特殊对象。引用有关“丰富比较”挂钩的文档:
按照惯例,
False
返回True
成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if
语句的条件中),Python 将调用bool()
该值来确定结果是真还是假。
请参阅 SQLAlchemy 源代码中的ColumnOperators
类以了解实现的特定挂钩。