带有嵌套类的SQLalchemy

时间:2010-11-13 12:11:21

标签: python orm sqlalchemy

我有一个相当复杂的对象,它将一些其他对象作为其成员。像这样:

from engine import engine

Class Car(object):

    def __init__(self,engine_type):
        self.engine=engine(engine_type)

是否有一种无痛的方法将这种嵌套定义映射到数据库,例如使用SQLAlchemy?

感谢您的帮助。我正在学习SQLAlchemy并与ORMS合作。

1 个答案:

答案 0 :(得分:1)

你想要完成什么并不是很清楚。如果我理解,你试图定义具有指向另一个引擎模型的引擎属性的Car模型,并通过使用engine_type创建Car对象,代码应该是:

  • 如果引擎类型不存在,则创建引擎对象
  • 使用引擎类型加载Engine对象(如果存在)

然后将其分配给Car对象。

如果是这样,您应该执行以下操作。

class Engine(object):
    def __init__(self, engine_type):
        self.engine_type

    @staticmethod
    def load(engine_type):
        return session.query(Engine)\
                      .filter(engine_type==engine_type).one()

class Car(object):
    def __init__(self, engine_type):
        try:
            engine = Engine.load(engine_type)
        except NoResultsFound:
            engine = Engine(session_type)
            session.add(engine)
        self.engine=engine

您需要自定义在Car mapper上创建'引擎'关系,并且您还需要调整代码以在需要时启用会话对象的范围。