Camelot和非Camelot应用程序之间的共享模型

2024-04-27 03:59:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在不同的Elixir/SQLAlchemy应用程序之间共享我的数据模型,其中一个应用程序是Camelot用户界面和其他东西,如web界面等等。它们都将连接到同一个底层数据库。在

据我所知,要构建一个Camelot应用程序,我的模型会做from camelot import blah,这将阻止它在任何未安装Camelot的环境中运行。在

我想知道是否有推荐的方法/最佳实践来做到这一点。当然,我的想法是为我的模型维护一个单一的代码库,而不是在不同的应用程序之间使用细微的差异来复制它(比如这里从SA/Elixir导入,在那里从Camelot导入,等等)。在

我的项目目前使用的是model/python包:

model/__init__.py
      foo.py
      bar.py
      ...

init.py如下所示:

^{pr2}$

和python模块食品, 棒.py,等等实际实现了各个部分。 每个模块都是这样开始的:

from sqlalchemy import Integer, Numeric, Date, Unicode, LargeBinary 
from elixir import Entity, Field, ManyToOne, OneToMany, ManyToMany 
from elixir import using_options 

一个想法可以是这样做:

try:
    from camelot import Integer, Numeric, ...
except ImportError:
    from elixir import Integer, Numeric, ...

这真的是个好主意还是我遗漏了什么?另外,理想情况下,我应该在某个中心位置执行类似于model/__init__.py的“环境初始化”工作,但是如何将导入传递到底层模块呢?在


Tags: 模块frompy模型import应用程序modelinit
1条回答
网友
1楼 · 发布于 2024-04-27 03:59:09

我不知道这是否是一个好主意,但是将导入作为中心很容易,因为在Java习惯用法中,模块是“单例”的:它们共享状态。换句话说,您可以执行以下操作:

在数据代理.py在

try:
    from camelot import Integer, Numeric, ...
except ImportError:
    from elixir import Integer, Numeric, ...

然后在另一个模块里呢

^{pr2}$

你将在任何地方得到相同的类(在同一个解释器会话中)。这个习惯用法通常用于配置文件,因为您可以在settings.py中编写设置代码,然后应用程序的其余部分将可以访问该代码的结果。在

相关问题 更多 >