2

テーブルから列を遅延ロードできることはわかっています。

session.query(MyTable).options(defer(colname) 
      for colname in ['col4', 'col5', ..,  'colN'])

最初の 3 列のみが必要なため、次のように短縮できます。

session.query(MyTable).options(defer(col.name) 
      for col.name in MyTable.__table__.columns
      if col.name not in ['col1', 'col2', 'col3'])

にはリストされていないMyTable余分な がいくつかあるため、これらは不要ですがクエリに含まれます。column_propertyMyTable.__table__.columns

それで、私が望むものを制限として直接表現する構造はありますか? たとえば、次のようなもの

session.query(MyTable).options(XXselect('col1', 'col2', 'col3'))
4

2 に答える 2

3

値のみが必要な場合は、次のように呼び出すことができます。

session.query(Mytable.col1, MyTable.col2, MyTable.col3).

遅延列を持つ完全なオブジェクトが必要な場合MyTable.__table__.columnsは、ミックスインに関係なくすべての列を提供する必要があります。

于 2012-07-09T16:42:55.230 に答える
0

これにはload_only()関数を使用できます

orm.load_only() を使用して、任意の列セットを「ロード専用」列として選択できます。これは、特定のエンティティの他のすべての列を延期しながらロードされます。

from sqlalchemy.orm import load_only

session.query(Book).options(load_only("summary", "excerpt"))
于 2017-11-15T20:16:14.803 に答える