を避けるために、私は見つけますこのように私は頻繁にこれをしなければならないことを見つける:私の結果セットが通常は小さいですが、彼らがいなかったならば、これは大きなオーバーヘッドを追加する可能性があるためSQL錬金術ORMは、どのように私はSQL錬金術のORMを使用しています一般的な後処理
results = [r[0] for r in results] # So that I just have a list of result values
これが「悪い」ということではありません。もっとも大きなことは、ソースがクラッタしていると感じることです。このステップを逃すことは、私が実行している非常に一般的なエラーです。
この余分なステップを避ける方法はありますか?
Aはさておき関連:私はその後、
[(result_1_id, result_1_val), (result_2_id, result_2_val)]
:ORMのこの動作は、この場合には不便が、私の結果セットが、それはこのように終わる[(ID、値)]であった別のケースと思われますちょうど行うことができます。
results = dict(results) # so I have a map of id to value
この1が結果を返した後に有用ステップとしての意味を作るという利点を有しています。
これは本当に問題なのでしょうか、私はちょうどニットピックで、結果セットを取得した後の後処理はどちらの場合にも意味がありますか?結果セットをアプリケーションコードでより使いやすくするために、他の一般的な後処理操作について考えることができます。高性能で便利なソリューションが全面的に提供されているのか、やむを得ない後処理であり、アプリケーションの用途を変えるだけで必要なのでしょうか?
私のアプリケーションがSQL AlchemyのORMによって返されるオブジェクトを実際に利用できるようになると、非常に役立つように見えますが、できない場合やそうでない場合はそうはなりません。これは一般的なORMの一般的な問題ですか?このような場合にORMレイヤーを使用しないほうがいいですか?
私は私が話している実際のORMクエリの一例を示すべきであるとします
もちろんsession.query(OrmObj.column_name).all()
または
session.query(OrmObj.id_column_name, OrmObj.value_column_name).all()
、実際のクエリでは、通常、いくつかのがあると思いますフィルタなど
はい、私は同意します、NamedTuplesはすぐに明らかではありません。私の最も一般的な後処理は、まだいくつかの種類の辞書を作成する必要があります。私の後処理の大部分は、より良いデータベースアーキテクチャとSQLAlchemyの使用法によって排除されているので、ORMオブジェクトに付随しているか、メソッドを通じて利用可能な値を持っています。 –