私は 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()
その値を呼び出して、結果が true か false かを判断します。
実装されている特定のフックについては、SQLAlchemy ソースのColumnOperators
クラスを参照してください。