8

我在工作中使用 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
        [...]

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

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

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

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

我也想避免使用 Elixir,拜托。

4

1 回答 1

3

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

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

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

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

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

于 2008-12-31T16:21:32.297 回答