<div>I try to implement database pooling with Storm using sqlalchemy pooling and it seems it works.</div>
<div>&nbsp;</div>
<div>Something like this</div>
<div>&nbsp;</div>
<div>import pyodbc<br>import sqlalchemy.pool as pool<br>from storm.locals import *<br>pool = pool.manage(pyodbc,echo=True)</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>store=Store(create_database(&quot;mssql://:@N5010/Dummy&quot;,pool))</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>in database.py&nbsp; in create_database function I added this code</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>
<p>def create_database(uri,pool=None):<br>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;Create a database instance.</p>
<p>&nbsp;&nbsp;&nbsp; @param uri: An URI instance, or a string describing the URI. Some examples:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;sqlite:&quot; An in memory sqlite database.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;sqlite:example.db&quot; A SQLite database called example.db
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;postgres:test&quot; The database &#39;test&#39; from the local postgres server.<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;postgres://user:password@host/test&quot; The database test on machine host<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with supplied user credentials, using postgres.
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;anything:...&quot; Where &#39;anything&#39; has previously been registered<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; with L{register_scheme}.<br>&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;<br>&nbsp;&nbsp;&nbsp; if isinstance(uri, basestring):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; uri = URI(uri)
<br>&nbsp;&nbsp;&nbsp; if uri.scheme in _database_schemes:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factory = _database_schemes[uri.scheme]<br>&nbsp;&nbsp;&nbsp; else:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; module = __import__(&quot;%s.databases.%s&quot; % (storm.__name__, uri.scheme),<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; None, None, [&quot;&quot;])
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if pool:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; module.create_from_uri.pyodbc_pool=pool<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; factory = module.create_from_uri<br>&nbsp;&nbsp;&nbsp; return factory(uri)</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>and in my /database/mssql.py class I use </p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>class Mssql(Database):</p>
<p>&nbsp;&nbsp;&nbsp; _connection_factory = MssqlConnection</p>
<p>&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; def __init__(self, uri):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if pyodbc is dummy:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raise DatabaseModuleError(&quot;&#39;pyodbc&#39; module not found&quot;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self._dsn = make_dsn(uri)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #self.pool = 
pool.manage(pyodbc,echo=True)</p>
<p><br>&nbsp;&nbsp;&nbsp; def connect(self):<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw_connection = Mssql.pyodbc_pool.connect(self._dsn)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; raw_connection.execute(&#39;SET nocount ON&#39;)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return self._connection_factory(self, raw_connection)
</p>
<p><br>create_from_uri = Mssql</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>I am trying to get pyodbc work with MSSql (it works kind of) but this technic could be applied to other db backends.</p>
<p>Tell me what you guys think</p>
<p>&nbsp;</p></div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>
<div>&nbsp;</div>