SQLalchemy与嵌套类

2 投票
1 回答
2393 浏览
提问于 2025-04-16 07:01

我有一个比较复杂的对象,它包含了几个其他的对象,类似这样:

from engine import engine

Class Car(object):

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

有没有什么简单的方法可以把这种嵌套的定义映射到数据库里,比如用SQLAlchemy?

谢谢你的帮助。我正在学习SQLAlchemy,并且在使用ORM。

1 个回答

1

你想要实现的目标不是很清楚。如果我理解得没错,你是想定义一个汽车模型,这个模型有一个引擎属性,这个属性指向另一个引擎模型。然后在创建汽车对象的时候,如果指定了引擎类型,代码应该要么:

  • 创建一个新的引擎对象,如果这个引擎类型还不存在的话
  • 如果这个引擎类型已经存在,就加载这个引擎对象

然后把它分配给汽车对象。

如果是这样的话,你需要做以下几件事。

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

你需要自己定义在汽车映射器中创建“引擎”关系的部分,同时还需要对代码进行一些调整,以便在需要的时候能够使用会话对象的范围。

撰写回答