Announcing sqladapters-1.0
Overview
This product allows developers to create filesystem-based SQL+DTML templates, and bind them to adapters using ZCML. These adapters can then apply a number of policies:
- They can bind the adapter to a named RDBMS connection.
- They can add an initial namespace mapping to the DTML namespace, via a user-supplied callable.
- They can filter / post-process the results of the query, again using a user-supplied callable.
- They can cache the results for an interval defined on a per-adapter basis.
The results of each SQL query are returned as a very lightweight object, resembling a sequence of dicts, one per row. This result set does not suffer from the leak which afflicts ZSQL.Result objects in Zope > 2.8.
Example Usage
In her product, Jane defines a SQL template in file 'sql/some_query.sql':
SELECT c.first_name, c.last_name, c.email FROM customers c <dtml-sqlgroup where="where"> <dtml-sqltest customer_id column="c.id" type="int" /> </dtml-sqlgroup>
The ZCML directive would look something like:
<configure xmlns="http://namespaces.zope.org/zope" xmlns:sqladapter="http://namespaces.agendaless.com/sqladapter"> <sqladapter:adapter for=".interfaces.ISomeContentInterface" name="some_query" permission="zope.Public" template="sql/some_query.sql" mapping=".somemodule.somefunction" connection="connetion_name" /> </configure>
In Python code, she would use that adapter as:
from zope.component import getAdapter from Products.sqladapters.interfaces import ISQLAdapter query = ISQLAdapter(some_obj) for row in query(): print row['first_name'], row['last_name']
Where to Get It
https://agendaless.com/Members/tseaver/software/sqladapters/sqladapters-1.0/
Reporting Bugs
https://agendaless.com/Members/tseaver/software/sqladapters/issues/