SqlAlchemy避免了ORM中的循环依赖,而不使用字符串

2024-04-19 07:50:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在SqlAlchemy ORM定义中,有没有一种方法可以更显式地使用类/成员引用而不是字符串常量,而不必运行循环依赖关系?ORM的主要好处之一是保持事物的“干净”和可维护性,而不是让字符串常量到处复制。这完全破坏了这种好处。你知道吗

SqlAlchemy文档中的一个简单示例,显示如何使用字符串常量。你知道吗

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship("Child")

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('parent.id'))

我想这样做:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)
    children = relationship(Child)

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey(Parent.id))

这通常是合法的,但问题是我遇到了循环依赖,需要从子级导入父级和从父级导入子级(假设它们在不同的文件中)。我能做的最好的事情就是分割差异——在一端使用字符串,在另一端执行显式类w/import。只是觉得恶心。你知道吗

只是想知道是我错过了什么,还是有人有办法做到这一点。你知道吗


Tags: key字符串idchildtruebasesqlalchemycolumn
1条回答
网友
1楼 · 发布于 2024-04-19 07:50:38

作为基于字符串的属性的替代方法,也可以在创建所有类之后定义属性。只需将它们添加到目标类:

class Parent(Base):
    __tablename__ = 'parent'
    id = Column(Integer, primary_key=True)

class Child(Base):
    __tablename__ = 'child'
    id = Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey(Parent.id))

Parent.childen = relationship(Child)

相关问题 更多 >