1

ORMクエリ(MyObject.query()など)の結果は、データベース内にない(つまり、別の検索エンジンからの)値に基づくランキングアルゴリズムに従って順序付けする必要があります。これは、「order_by」がデータベース内のフィールドでのみ動作するため、機能しないことを意味します。

ただし、クエリにさらに制約を追加する機能を維持したいので、クエリ結果をリストに変換してから並べ替える必要はありません。例えば:

results = MyObject.query()
results = my_reorder(results)
results = results.filter(some_constraint)

これはSQLAlchemyを介して達成できますか?

4

1 に答える 1

2

データベースにあるオブジェクトのテーブルおよび/または関連するオブジェクトのテーブルのフィールドから順序を導出できない限り、それを行うことはできません。

ただし、コードからタプルを返すことはできます(query, order_func/result)。この場合、クエリは実行されるまで拡張でき、その後再利用できます。Proxyまたは、このタプルを含み、query-extensionメソッドをクエリに委任し、query-executionメソッド(all(), __iter__、...)をクエリに委任して、実行時に順序付けを適用する、小さなようなクラスを作成することもできます。

MyObjectまた、各インスタンスの値を事前に計算できる場合は、literal値を使用してクエリに列を追加し、それを使用order_byして並べ替えることができます。または、一時テーブルを追加し、計算された順序値を使用して行を追加し、クエリで結合して順序を追加します。しかし、これらは、それらがもたらすメリットよりも複雑さを増していると思います。

于 2012-05-17T18:40:24.467 に答える