0

我正在使用声明性 SQLAlchemy 类来执行计算。部分计算要求我对不同表提供的所有配置执行计算,该表在两个表之间没有任何外键关系。

这个类比与我的实际应用完全不同,但希望有助于理解我想要发生的事情。

我有一套汽车和一份油漆颜色清单。汽车对象有一个工厂,它提供所有可能颜色的汽车

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 的评论)。基本上,我一直在寻找一次性的语法糖。我原来的“丑陋”实现工作得很好。

除了获得 Session 并生成您想要的查询之外,这里还有什么更好的方法?您是否正在寻找能够添加到集合中并自动刷新的东西?(只是将对象添加到 Session 中?)你不喜欢使用 object_session(self) >(你可以构建一些 mixin 类或为你隐藏它的东西吗?)这不是很清楚 > 问题是什么。这里的对象与父类没有关系,因此 SQLAlchemy 无法添加任何特定的智能。– zzzeek 6 月 17 日 5:03

于 2013-09-04T20:52:46.937 回答