我正在尝试在SQLAlchemy上设置一个关系,以便在删除父表时删除级联中的表。 问题是我的数据库结构有点尴尬,sqlalchemy根本不喜欢它。
这里稍微看一下:
class Project(Base):
__tablename__ = 'project'
prj_id = sqla.Column(sqla.INTEGER, primary_key=True)
name = sqla.Column(sqla.String)
# Tariff used by project
t_id = sqla.Column(sqla.INTEGER, sqla.ForeignKey("tariff.t_id"))
# Tariff created by project
tariff = relationship("Tariff", cascade="all, delete-orphan", foreign_keys=[prj_id])
class Tariff(Base):
__tablename__ = "tariff"
t_id = sqla.Column(sqla.INTEGER, primary_key=True)
name = sqla.Column(sqla.String)
prj_id = sqla.Column(sqla.INTEGER, sqla.ForeignKey("project.prj_id"))
为了解释一下我的项目表使用了关税,另一方面我的关税表可以在项目中创建。项目可以创建关税并使用另一个项目,并且可以在任何项目之外创建关税。
SQLAlchemy的错误是: sqlalchemy.exc.NoForeignKeysError:无法确定关系Project.tariff上的父/子表之间的连接条件 - 没有链接这些表的外键。 但我很确定prj_id是关税的外键,对吗?
这个结构可能有点笨拙,但是我可以让它与sqlalchemy一起使用,还是我必须稍微改变它?