0

宣言型 SQLAlchemy クラスを使用して計算を実行しています。計算の一部では、2 つのテーブル間に外部キー関係がない別のテーブルによって提供されるすべての構成に対して計算を実行する必要があります。

この類推は、私の実際のアプリケーションとはまったく異なりますが、私が何をしたいのかを理解するのに役立つことを願っています.

車のセットと塗装色のリストがあります。car オブジェクトには、可能なすべての色の車を提供するファクトリがあります。

from sqlalchemy import *
from sqlachemy.orm import *

def PaintACar(car, color):
   pass

Base = declarative_base()

class Colors(Base):
    __table__ = u'colors'

    id = Column('id', Integer)
    color= Column('color', Unicode)

class Car(Base):
    __table__ = u'car'

    id = Column('id', Integer)
    model = Column('model', Unicode)

    # is this somehow possible?
    all_color_objects = collection(...)

    # I know this is possible, but would like to know if there's another way
    @property
    def all_colors(self):
        s = Session.object_session(self)
        return s.query(A).all()

    def CarColorFactory(self):
        for color in self.all_color_objects:
            yield PaintACar(self, color)

私の質問: どうにかして all_color_objects を生成することは可能ですか? all_colors プロパティのように、セッションを見つけて手動でクエリを発行する必要はありませんか?

4

1 に答える 1

0

しばらく経ったので、私が見た最良の回答を提供します(zzzeekによるコメントとして)。基本的に、私は 1 回限りのシンタックス シュガーを探していました。私のオリジナルの「醜い」実装は問題なく動作します。

セッションを取得して必要なクエリを生成する以外に、ここでどのような良い方法があるでしょうか? コレクションに追加して自動的にフラッシュする機能をお探しですか? (オブジェクトをセッションに追加するだけですか?) object_session(self) を使用するのは好きではありませんか? (いくつかの mixin クラスまたはそれを隠す何かを作成できますか?) 問題が何であるかはあまり明確ではありません。ここのオブジェクトには親クラスとの関係がないため、SQLAlchemy が追加できる特定のインテリジェンスはありません。— zzzeek 6 月 17 日 5:03

于 2013-09-04T20:52:46.937 に答える