[Zope] Iteration over columns in ZSQLMethod result not working in Zope 2.12.13

Andreas Elvers andreas at work.de
Wed Dec 1 10:06:16 EST 2010


Am 1.12.10 14:52 , schrieb Tres Seaver:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On 12/01/2010 08:27 AM, Andreas Elvers wrote:
>> Hi,
>>
>> I stumbled over the following error using Zope 2.12.13. Bug ?
>>
>> Given some ZSQLMethod,  and either ZMySQLDA (3.1.1) or ZPsycopgDA
>> (2.0.14 or 2.2.2)
>> and the following python script:
>>
>> result = context.someZSQLMethod()
>> for row in result:
>>      for col in row: #this will fail
>>         pass
>>
>> I get an AttributeError: __iter__
>>
>> Traceback (innermost last):
>>     Module ZPublisher.Publish, line 127, in publish
>>     Module ZPublisher.mapply, line 77, in mapply
>>     Module ZPublisher.Publish, line 47, in call_object
>>     Module Shared.DC.Scripts.Bindings, line 324, in __call__
>>     Module Shared.DC.Scripts.Bindings, line 361, in _bindAndExec
>>     Module Products.PythonScripts.PythonScript, line 344, in _exec
>>     Module script, line 3, in someZSQLMethod
>>      -<PythonScript at /testfolder/somePythonScript>
>>      - Line 3
>>     Module AccessControl.ZopeGuards, line 181, in next
>>     Module AccessControl.ZopeGuards, line 211, in guard
>>     Module AccessControl.SecurityManagement, line 21, in getSecurityManager
>> AttributeError: __iter__
>
> I don't think the Record class fills the 'tp_iter' slot.  Does the
> following workaround help?
>
>    result = context.someZSQLMethod()
>    for row in result:
>        for i in range(len(row)):
>           col = row[i[
>
>

Yep. That one is working. Although that makes the planned upgrade from 
Zope 2.10 to 2.12 a real pain because I use a lot of the following :

result = context.someZSQLMethod()
names = result.names()
dataForTemplate = dict(zip(names,result[0]))
dataForTemplate['addingSomeMoreData'] = 'datadata'
return context.comeTemplate(data=dataForTemplate)

When did the iteration feature go away ? Must have missed the 
deprecation process.

- Andreas



More information about the Zope mailing list