Python 带嵌套类的SQLalchemy

Python 带嵌套类的SQLalchemy,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,我有一个相当复杂的对象,它以一些其他对象作为其成员。大概是这样的: from engine import engine Class Car(object): def __init__(self,engine_type): self.engine=engine(engine_type) 是否有一种无痛的方法来将这种嵌套定义映射到数据库,例如使用SQLAlchemy 谢谢你的帮助。我正在学习SQLAlchemy并使用ORMS 不太清楚你想要完成什么。如果我理解,您正在尝

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

from engine import engine

Class Car(object):

    def __init__(self,engine_type):
        self.engine=engine(engine_type)
是否有一种无痛的方法来将这种嵌套定义映射到数据库,例如使用SQLAlchemy


谢谢你的帮助。我正在学习SQLAlchemy并使用ORMS

不太清楚你想要完成什么。如果我理解,您正在尝试使用指向另一个引擎模型的engine属性定义汽车模型,并且通过创建engine_类型的汽车对象,代码应该:

  • 创建引擎类型为Engine的引擎对象(如果不存在)
  • 使用引擎类型加载引擎对象(如果存在)
然后将其指定给汽车对象

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

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

您需要自己定义以在汽车映射器上创建“引擎”关系,还需要调整代码以在需要时启用会话对象的范围。

在代码格式化方面做出了巨大的努力,但我必须为您进行修复。像我一样在代码块前面使用四个空格。使用`字符作为内联代码。我希望得到一个答案,即
引擎
字段映射到与
汽车
字段相同的选项卡,因为它们是1:1相关的。Hibernate是开箱即用的。如果引擎的子组件需要以相同的方式加载,这将很快变得复杂。所以对于ORM,我不能简单地拥有复杂的嵌套关系?例如,假设引擎有一个圆柱体对象成员。你想列出不同气缸数的汽车。(假设engine有一个圆柱体对象列表,[cylinder 1,cylinder 2,…]。这样的模型中的所有内容都像看起来一样难以持久化吗?或者我应该尝试在一个层上定义汽车模型。)我认为,如果不将引擎模型与圆柱体模型重新组合(在您的情况下,一个引擎对应多个圆柱体),这不会是一个问题,据我所知。稍后,您可以轻松地获得有关气缸的汽车列表。如果你能告诉我发动机气缸rel的具体方面以及你想要装载的汽车列表,我可以修改代码来帮助你。我很困惑。让我再想想你在上面做了什么。据我所知,我需要存储每个对象X,然后如果另一个对象的成员是X,它必须尝试加载它,如果它不存在,则创建它,然后在创建它以存储时将其添加到会话中。在您的代码中,以后如何从数据库中加载Car对象?它的引擎成员也会自动加载吗?你是对的。可以通过查询会话来加载Car对象。您可以选择是急切地加载其引擎(在同一次调用中从db查询),还是惰性地加载(仅在需要时查询,即作为汽车的属性访问)。您可以使用我的这篇文章来了解有关关系和反射的更多信息: