How does sqlachemy query method work?

python, sqlalchemy, syntax

Solution

SQLAlchemy uses the various special method hooks to overload operator behaviour.

For `==`, the `__eq__()` method returns special objects that signify a SQL expression when compiled. To quote the documentation on the 'rich comparison' hooks:

By convention, `False` and `True` are returned for a successful comparison. However, these methods can return any value, so if the comparison operator is used in a Boolean context (e.g., in the condition of an `if` statement), Python will call `bool()` on the value to determine if the result is true or false.

See the `ColumnOperators` class in the SQLAlchemy source for the specific hooks implemented.

Problem

I am learning sqlachemy, I'm relatively new to Python. When I read its documentation, I saw this kind of usage, for example: query.filter(User.name == 'ed') Wouldn't Python evaluate the expression `User.name == 'ed'` and then pass the result, which is a boolean, to `query.filter` method? How does this kind of syntax work? Does Python support some kind of operator overriding like C++?

Original source