python - 组织包含 SQLAlchemy 模型的文件夹的最佳方式

标签 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
        [...]

现在,我真的不知道这是否是最好的方法。我想以细粒度加载类,并确保仅与数据库等创建一个连接。

在这里,所有的类都是分开的,但是都导入了_config,我想知道这是不是一件好事。

此外,我希望能够创建模型类的子类,这些子类可以独立存储,而不会每次都弄乱映射器。我怎样才能做到这一点 ?

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

我也想避免使用 Elixir,谢谢。

最佳答案

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

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

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

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

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

关于python - 组织包含 SQLAlchemy 模型的文件夹的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/362998/

相关文章:

python - Peewee ORM - 即使计数为 0,也注释多对多关系的计数

java - greendao 设置父类(super class)

python - Docker容器上的Django MSSQL服务器不会迁移

python - 如何在Python中通过HTTPPost方法发送大文件,上传大文件

android - DBFlow 一对多示例

python - SQLAlchemy - 在整个数据库模型列中搜索模式

python - 在写入 pandas 数据框之前在 SqlAlchemy 中设置列​​的顺序

python - 将 PyQt 与 sql orm 库(sqlalchemy、peewee 等)集成

python - 为什么我的 Kedro 日志文件一直为空?我错过了什么步骤吗?

python - Python 类型提示语法如何/为什么起作用?