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++?