我有一个使用 SQLalchemy 作为数据库的 FLASK 应用程序。
模型都在models.py中,我在大多数模型类的默认 ORM 属性和方法中添加了几个属性和方法。例如; 我的“合同”模型有一个额外的属性 contract.first_possible_termination 返回一个日期。
问题是这个属性访问了一个实用程序模块,该模块具有计算日期范围的功能。并且该功能需要使用存储在数据库中的“配置”表中的不同配置选项。
所以实用程序模块需要再次使用 ORM 模型来访问配置表,因此我们有一个循环导入:
ImportError: cannot import name Configuration
我想知道在这里避免循环导入的标准方法是什么。我想更多的人会遇到这种情况,因为有人会在模型中添加方法和属性。
编辑,请注意:
我认为植物人的回答通常是最好的方法,因为它促进了 SoC,但在我的具体情况下,我正在使用一个遗留数据库,该数据库具有影响分布在不同表中的不同表中的业务规则的值数据库。
我添加到模型中的许多功能将以某种方式依赖于这些值/业务规则,因此如果不进行大量重构并传递大量额外的外部数据,我将无法避免在这些函数中访问数据库我的辅助函数的值。
我只能接受一个答案,但两者都是有效的,所以对两者都投赞成票,但 Blubber 的答案是我目前的个人解决方案。
感谢 Blubber 和 Plantian。