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

Leo*_*ade 2 zope plone

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

我需要将通常的SQLAlchemy的池类型更改QueuePoolNullPool.但是,有没有办法使用它z3c.saconfig

Mar*_*ers 5

z3c.saconfig委托创建SQLAlchemy引擎到IEngineFactory实用程序; 看到界面来源.

您可以创建自己的子类以注册为本地实用程序.您的子类可以重用现有的实用程序实现,覆盖该configuration()方法:

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
Run Code Online (Sandbox Code Playgroud)

上面sqlalchemy.create_engine()通过添加参数来扩充函数的poolclass参数.

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

<?xml version="1.0"?>
<componentregistry>
  <utilities>
    <utility
        interface="z3c.saconfig.interfaces.IEngineFactory"
        factory="yourproject.yourmodule.NullPoolEngineFactory"/>
  </utilities>
</componentregistry>
Run Code Online (Sandbox Code Playgroud)

运行通用设置配置文件后,它会注册该实用程序的持久版本,并且可以找到它而不是默认的全局实用程序.