私は 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クラスを参照してください。