获取通用模型类中的连接对象

时间:2014-02-08 19:39:44

标签: python database-connection

我有一个Model课程,这是我自制的ORM的一部分。它有各种方法,如save()create()等。现在,问题在于所有这些方法都需要连接对象才能正常运行。我不知道用连接对象提供Model对象的最佳方法是什么。

到目前为止我的意思是:

  • Model的{​​{1}}中提供连接对象;这将通过设置实例变量并在整个方法中使用它来工作,但它会破坏API;用户在创建__init__()对象时不应始终提供连接对象;
  • 分别创建连接对象,将其存储在某处(哪里?),并在Model的{​​{1}}上获取存储位置的连接并将其放在实例变量中(这就是我认为这是最好的方法,但不知道存储该连接对象的最佳位置);
  • 创建一个连接池,它将被连接对象提供,然后在Model的{​​{1}}上从连接池中获取连接(我如何知道要从池中获取哪个连接? )。

如果有任何其他问题,请告诉我们。另外,我想知道哪种方法是正确的。

1 个答案:

答案 0 :(得分:1)

以下是我的行为:

  • 使用带有队列接口的连接池。您不必选择连接对象,只需选择下一行即可。这可以在您需要交易时完成,然后再回来。

  • 除非你有一些非常具体的需求,否则我会使用Singleton类进行数据库连接。无需每次都在构造函数上传递参数。

  • 为了进行测试,您只需在Singleton类上放置一个模拟的数据库连接。

编辑:

关于连接池问题(我可能在这里错了,但这将是我的第一次尝试):

  • 保持所有连接处于打开状态。 Pop当您需要时,put当您不再需要它时,就像常规队列一样。此队列可以从Singleton公开。

  • 您从固定的默认连接数开始(如20)。您可以覆盖pop方法,因此当队列为空时,您阻止(如果程序是多线程的,则等待另一个释放)或者动态创建新连接。

  • 破坏连接更加微妙。您需要跟踪程序使用的连接数,以及连接过多的可能性。请注意,因为破坏以后需要的连接会降低程序的速度。最后,它是一个改变性能特征的启发式问题。