4

私は sqlachemy を学んでいます。私は Python に比較的慣れていません。

そのドキュメントを読んだとき、次のような使用法を見ました。

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

Python は式を評価し、ブール値である結果をメソッドUser.name == 'ed'に渡しませんか?query.filter

この種の構文はどのように機能しますか? Python は C++ のようなある種の演算子オーバーライドをサポートしていますか?

4

1 に答える 1

6

SQLAlchemy は、さまざまな特別なメソッド フックを使用して、演算子の動作をオーバーロードします。

の場合==、この__eq__()メソッドは、コンパイル時に SQL 式を表す特別なオブジェクトを返します。「リッチ比較」フックに関するドキュメントを引用するには:

慣例により、比較が成功した場合はFalseとが返されます。Trueただし、これらのメソッドは任意の値を返すことができるため、比較演算子がブール コンテキスト (ifステートメントの条件など) で使用されている場合、Python はbool()その値を呼び出して、結果が true か false かを判断します。

実装されている特定のフックについては、SQLAlchemy ソースのColumnOperatorsクラスを参照してください。

于 2013-03-29T10:57:43.763 に答える