Python SQLAlchemy导入具有关系的表

Python SQLAlchemy导入具有关系的表,python,sqlalchemy,relationship,Python,Sqlalchemy,Relationship,我在分离不同文件中具有关系的表时遇到问题。我希望下表位于三个单独的文件中,并在第三方页面中导入TableA,但我无法管理加载顺序 在大多数情况下,我会收到以下错误 sqlalchemy.exc.InvalidRequestError:初始化映射器映射器| TableA | TableA时,表达式“TableB”找不到名称(“未定义名称“TableB”)。如果这是一门课 名称,考虑在定义了依赖类之后将此关系()添加到类。 这应该起作用(注意,表C.表被替换为表名,以避免循环模块加载): 另外,我认

我在分离不同文件中具有关系的表时遇到问题。我希望下表位于三个单独的文件中,并在第三方页面中导入TableA,但我无法管理加载顺序

在大多数情况下,我会收到以下错误

sqlalchemy.exc.InvalidRequestError:初始化映射器映射器| TableA | TableA时,表达式“TableB”找不到名称(“未定义名称“TableB”)。如果这是一门课 名称,考虑在定义了依赖类之后将此关系()添加到类。 这应该起作用(注意,表C.被替换为表名,以避免循环模块加载):


另外,我认为ForeignKey参数区分大小写,因此您的代码可能无法工作,因为“TableA.id”与“TableA”名称不匹配(区分大小写)。

您必须导入类才能在关系中使用它吗?@BalthazarRouberol,测试后,是的,在我询问IRC后,您需要确认每个类中的导入。我将为此提交一个文档补丁,因为我也不清楚。
class TableA(Base):
    __tablename__ = "tablea"
   id = Column(Integer, primary_key=True)
   name = Column(String)

   tableB = relationship("TableB", secondary = TableC.__table__)

class TableB(Base):
   __tablename__ = "tableb"
   id = Column(Integer, primary_key=True)
  name = Column(String)

class TableC(Base):
   __tablename__ = "tableab"
   tableAId = Column("table_a_id", Integer, ForeignKey("TableA.id"), primary_key=True)
   tableBId = Column("table_b_id", Integer, ForeignKey("TableB.id"), primary_key=True)
### base.py
engine = create_engine('sqlite:///:memory:', echo=True)
Session = sessionmaker(bind=engine)
Base = declarative_base(bind=engine)

### classA.py
from base import Base
from classB import TableB

class TableA(Base):
    __tablename__ = 'tablea'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))
    tableBs = relationship("TableB", secondary="tableab")
    #tableBs = relationship("TableB", secondary=TableC.__table__)

### classB.py
from base import Base

class TableB(Base):
    __tablename__ = 'tableb'
    id = Column(Integer, primary_key=True)
    name = Column(String(50))

### classC.py
from base import Base
from classA import TableA
from classB import TableB

class TableC(Base):
    __tablename__ = 'tableab'
    tableAId = Column(Integer, ForeignKey("tablea.id"), primary_key=True, )
    tableBId = Column(Integer, ForeignKey("tableb.id"), primary_key=True, )

### main.py
from base import Base, Session, engine
from classA import TableA
from classB import TableB
from classC import TableC
Base.metadata.create_all(engine)
from sqlalchemy import Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class Parent(Base):
    __tablename__ = 'Parent'
    ParentID = Column(Integer, primary_key=True)
    Description = Column(String)

    def __init__(self, ParentID, Description):
        self.ParentID = ParentID
        self.Description = Description
----------------------------------------------------------------------

from sqlalchemy import Column, String, Integer, ForeignKey
import Parent
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()


class Child(Base):
    __tablename__ = "Child"
    ChildID = Column(Integer, primary_key=True)
    Description = Column(String)
    ParentID = Column('CompanyID', Integer, ForeignKey(Parent.ParentID))

    def __init__(self, ChildID, Description,ParentID):
        self.ChildID = ChildID
        self.Description = Description
        self.ParentID=ParentID