我想在不同的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
的“环境初始化”工作,但是如何将导入传递到底层模块呢?在
我不知道这是否是一个好主意,但是将导入作为中心很容易,因为在Java习惯用法中,模块是“单例”的:它们共享状态。换句话说,您可以执行以下操作:
在数据代理.py在
然后在另一个模块里呢
^{pr2}$你将在任何地方得到相同的类(在同一个解释器会话中)。这个习惯用法通常用于配置文件,因为您可以在
settings.py
中编写设置代码,然后应用程序的其余部分将可以访问该代码的结果。在相关问题 更多 >
编程相关推荐