为了账号安全,请及时绑定邮箱和手机立即绑定

SqlAlchemy:无外键错误,尽管已定义外键

SqlAlchemy:无外键错误,尽管已定义外键

Qyouu 2023-07-05 16:13:13
我开发了一个基于SQLAlchemy的框架。在我的映射器中导入表的代码如下:        for table in tables:        columns = []        relationships = {}        for column in inspect.getmembers(table,                                         lambda a: not (inspect.isroutine(a)) and (                                                 type(a) == Column or type(a) == RelationshipProperty)):            if type(column[1]) == Column:                column[1].name = column[0]                columns.append(column[1])            else:                column[1].argument = list(filter(lambda t: t.__name__ == column[1].argument, tables))[0]                relationships[column[0]] = column[1]        sql_table = Table(table.__tablename__,                          base.metadata,                          *columns,                          extend_existing=True)        mapper(table, sql_table, properties=relationships)    base.metadata.create_all()然后我定义了各种表:Permission.py:class Permission(TableModel):__tablename__ = 'permission'network_id = Column(String(255), ForeignKey("network.id", ondelete="CASCADE"), primary_key=True,                    default=check_network_validity)user_id = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"), primary_key=True)user = relationship("User", back_populates="permissions",                    foreign_keys=user_id)network = relationship("Network", back_populates="permissions",                       foreign_keys=network_id)type = Column(Enum(TypeEnum), primary_key=True)validated_by = Column(Integer, ForeignKey("user.id", ondelete="CASCADE"), nullable=True, default=None)end_validity = Column(DateTime, nullable=True)created = Column(DateTime, default=datetime.utcnow())last_updated = Column(DateTime, default=datetime.utcnow(), onupdate=datetime.utcnow())任何想法?甚至顶测试一些东西?
查看完整描述

1 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

问题实际上是同一个模块加载了不同的路径。所以我的外键没有引用正确的表。



查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信