组织包含SQLAlchemy模型的文件夹的最佳方法

e-s*_*tis 7 python orm sqlalchemy

我在工作中使用SQLAlchemy,它的工作非常好.现在我在考虑最佳实践.

现在,我创建一个包含所有SQLA内容的模块:

my_model
        |__  __init__.py 
        |__  _config.py <<<<< contains LOGIN, HOST, and a MetaData instance
        |__  table1.py <<<<< contains the class, the model and the mapper for table1
        |__  table2.py <<<<< contains the class, the model and the mapper for table2
        [...]
Run Code Online (Sandbox Code Playgroud)

现在,我真的不知道这是否是最佳方式.我想以精细的粒度加载类,并确保只与db等创建一个连接.

在这里,所有类都是分开的,但是所有import _config都是我想知道这是不是一件好事.

更重要的是,我希望能够创建可以独立存储的模型类的子类,而不必每次都搞乱映射器.我怎样才能做到这一点 ?

现在我只是将它们放在同一个文件中,我必须创建另一个映射器,但每次都会调用第一个映射器.如果我必须导入父类,因为在导入时触发了映射器,情况也会如此.如果我不使用该类访问数据,那么每次映射都不会过热吗?

我也想避免使用Elixir.

Kam*_*iel 3

就我个人而言,我喜欢将数据库/ORM 逻辑保留在模型类之外。这使它们更容易测试。我通常有类似 a 的东西types.py,它定义了我的应用程序中使用的类型,但独立于数据库。

然后通常有一个db.py或类似的东西,它具有Session设置数据库所需的类和其余代码,包括所有映射器等。

除了执行数据库操作的模块之外,其他模块都不需要导入该db模块,并且数据库的存在对大多数应用程序类来说是完全隐藏的。

据我所知,如果不更改映射器,您无法轻松创建子类。当您执行查询时,SQLAlchemy 将无法知道要从数据库中检索哪个子类,并且无论如何您都需要能够在存储数据时指示子类。

我还没有真正看到从主模块一次调用所有映射器会出现任何问题db,所以我不认为一直初始化它们确实是一个问题,除非您实际上将其识别为瓶颈。根据我的经验,其他处理比较小的映射器开销要大得多。