私はPyObjectでSQLObjectのORMを使用していますが、私はTable.select(...)
と同じ方法で(行オブジェクトの)ジェネレータを反復処理できるようにしたいが、このメソッド呼び出しを行うことで得られるものはあまりにも制限的ですさらにfilter()
を使用しています。カスタムSQLObject Selectコールでジェネレータを取得できますか?
私は、このようにSQLクエリからになるだろうと同じことをしたい:
SELECT TableB.column_x, TableA.*
FROM TableA
INNER JOIN TableB
ON TableA.column_y = TableB.column_z;
私はこの正確なクエリを取得するためにSQLBuilderを使用する方法を知っている:
columns = [TableB.q.column_x, TableA.q.id] +
[getattr(TableA.q, col.name) for col in TableA.sqlmeta.columnList]
inner_join = sqlbuilder.INNERJOINOn(
table1=TableA,
table2=TableB,
on_condition=(TableA.column_y==TableB.column_z),
)
select = sqlbuilder.sqlbuilder.Select(items=columns, join=inner_join)
そこから私がすることができますこのクエリを実行します。
conn = TableA._connection
rows = conn.queryAll(conn.sqlrepr(select))
しかし、これはタプルのリストを返し、ないあなたがTable.select(...).filter(...)
これはTableA
の「RESTORE_DEFAULTS」エンドポイント、私は戻す必要がある(デフォルト、およびのみデフォルト)行の一部であり、私はその参照する必要があるかを実行して得られるような同等の発電機既定の行はまだ存在し、ユーザーが作成した可能性のある余分なカスタム行を上書きしないで、すべての既定の行をTableA
に挿入する前に削除します。言い換えれば、これは特定の要件であり、私は本当に上記のSQLクエリから拡張テーブルを使用する必要があります。
私は返されたタプル(それらから一時的なディクテーションを作成することさえも)をチェックに使用して辞書を更新できることを認識していますが、通常の処理を行うことでSQLObjectから直接のインタラクティビティを得る良い方法がありますselect()
コール?
(私たちは、Python 2.4に限定しているが、私はそれが大きな違いになるとは思わない)
Djangoモデルでは「注釈」機能のようなものを探していますが、SQLObjectにこのような機能はないと思います。したがって、多くのテーブルのデータを必要とする場合は、タプルだけを選択できます。 –