sqlalchemy查询方法如何工作?

时间:2013-03-29 10:51:27

标签: python syntax sqlalchemy

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

当我阅读其文档时,我看到了this kind of usage,例如:

  

query.filter(User.name =='ed')

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

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

1 个答案:

答案 0 :(得分:3)

SQLAlchemy使用各种special method hooks来重载操作符行为。

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

  

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

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