是否可以在对象上创建一个彼此没有外键关系的集合?

时间:2013-06-13 23:51:37

标签: python sqlalchemy

我正在使用声明性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属性中那样求助于查找会话并手动发出查询?

1 个答案:

答案 0 :(得分:0)

已经有一段时间了,所以我提供了我看到的最佳答案(作为zzzeek的评论)。基本上,我一直在寻找一次性的语法糖。我最初的“丑陋”实现工作正常。

  

除了获取会话和生成查询之外,还有什么更好的方法   想?您是否正在寻找能够自动添加到集合中的内容   冲洗东西? (只是将对象添加到Session?)你不喜欢使用   object_session(self)>(你可以构建一些mixin类或隐藏它的东西   你呢?)这不是很清楚>问题是什么。这里的对象与之无关   父类,因此没有SQLAlchemy能够添加的特定智能。    - zzzeek Jun 17 at 5:03