是否有一种方法可以通过使用类/成员引用而不是字符串常量来在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))
这通常是合法的,但是问题是我遇到了循环依赖关系,需要从Child导入Parent和从Parent导入Child(假设它们在单独的文件中)。我能做的最好的就是消除差异-并在一端使用字符串,在另一端使用带有import的显式类。只是觉得恶心。
只是想知道我是否缺少某些东西,或者有人可以通过某种方式完成此任务。
答案 0 :(得分:1)
作为基于字符串的属性的替代方法,还可以在创建所有类之后定义属性。只需在事实之后将它们添加到目标类中即可:
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)