使用z3c.saconfig时可以使用NullPool而不是QueuePool吗?

时间:2014-08-15 20:53:23

标签: plone zope

我有一个Zope / Plone 4.3环境,我们使用z3c.saconfig在内部产品中配置数据库(Oracle)设置。

我需要将通常的SQLAlchemy池类型从QueuePool更改为NullPool。但是,有没有办法使用z3c.saconfig

1 个答案:

答案 0 :(得分:5)

z3c.saconfig委托创建SQLAlchemy引擎到IEngineFactory实用程序;请参阅interface source

您可以创建自己的子类以注册为local utility。您的子类可以重用现有的实用程序实现,覆盖configuration() method

from persistent import Persistent
from z3c.saconfig.utility import EngineFactory
from sqlalchemy.pool import NullPool

class NullPoolEngineFactory(Persistent, EngineFactory)
    def configuration(self):
        kwargs = self._kw.copy()
        kwargs['poolclass'] = NullPool
        return self._args, kwargs

以上通过添加poolclass argument来增加sqlalchemy.create_engine()函数的参数。

您必须将此实用程序注册为GenericSetup配置文件中的组件:

<?xml version="1.0"?>
<componentregistry>
  <utilities>
    <utility
        interface="z3c.saconfig.interfaces.IEngineFactory"
        factory="yourproject.yourmodule.NullPoolEngineFactory"/>
  </utilities>
</componentregistry>

运行通用设置配置文件后,会注册该实用程序的持久版本,而不是默认的全局实用程序。