2008-12-12 50 views
6

我在工作中使用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和我想知道,如果这是一件好事。

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

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

我想避免使用Elixir。

回答

3

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

然后典型地有一个类似的db.py或东西其具有Session类和码来建立数据库,其中包括所有的映射器等

无其他模块中的除了那些执行所需的其余数据库操作需要导入db模块,并且数据库的存在对大部分应用程序类都是完全隐藏的。

据我所知,在不更改映射器的情况下,不能轻易制作子类。 SQLAlchemy在执行查询时无法知道从数据库中检索哪个子类,并且无论如何您都需要能够指示子类。

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

相关问题