SQLAlchemy使用关系导入表
我有分隔表与不同文件中的关系的问题。 我希望下面的表格位于三个单独的文件中,并在第三方页面中导入TableA ,但我无法管理加载顺序。
在大多数情况下,我收到以下错误。
sqlalchemy.exc。 InvalidRequestError:初始化映射器Mapper | TableA |表时,表达式'TableB'找不到名称(“名称'表B'未定义”)。 如果这是一个类名,考虑在定义了两个相关类之后,将这个关系()添加到类中。
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)
这应该工作(请注意TableC 表被替换为表的名称以避免循环模块加载):
### 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)
另外我相信ForeignKey参数是区分大小写的,所以你的代码可能不起作用,因为“TableA.id”在区分大小写的时候会匹配“tablea”的名字。
链接地址: http://www.djcxy.com/p/10875.html