On Nov 6, 2010, at 3:12 PM, Kent wrote:

> Mike,
> 
> I made the assumption parameters would always be a dictionary:
> 
> from sqlalchemy.interfaces import ConnectionProxy
> class PostgresProxy(ConnectionProxy):
>    """
>    Low level connection proxy to change all empty string '' to None,
> so that
>    postgres and Oracle behave the same for us
>    """
>    def cursor_execute(self, execute, cursor, statement, parameters,
> context, executemany):
>        for param, value in parameters.items():
>            if value == u'':
>                parameters[param] = None
>        return execute(cursor, statement, parameters, context)
> 
> Apparently, for some circumstances, (maybe for many to many?),
> parameters is a tuple?
> 
> AttributeError: 'tuple' object has no attribute 'items'
> 
> 
> Can you explain when (if time, why)?  How can I fix my code?

if you intercept at the execute() level, you get the consistently structured 
parameters and the SQL expression construct, if that's what was used.    If you 
intercept at cursor_execute(), you get the rendered statement and and actual 
cursor datastructure that's sent to the DBAPI.   So execute() is the better 
place to intercept things in a generic way.



> 
> Thanks!
> 
> Kent
> 
> 
> 
> 
> On Nov 4, 11:42 am, Michael Bayer <mike...@zzzcomputing.com> wrote:
>> On Nov 4, 2010, at 11:16 AM, Kent wrote:
>> 
>>> We are writing an application that can run on PostgreSQL or Oracle.
>>> Since postgres treats NULL and '' (empty string) differently, while
>>> Oracle treats '' as NULL, this can cause subtle behavior differences
>>> based on the underlying database.
>> 
>>> Can you think of a way I could easily intercept all UPDATE and INSERT
>>> column values, and, if the value is the empty string, replace with
>>> None/null?
>> 
>>> Thanks in advance if you can point me in the right direction.
>> 
>> the current method on this is the ConnectionProxy:
>> 
>> http://www.sqlalchemy.org/docs/core/interfaces.html#sqlalchemy.interf...
>> 
>> 
>> 
>>> Kent
>> 
>>> --
>>> You received this message because you are subscribed to the Google Groups 
>>> "sqlalchemy" group.
>>> To post to this group, send email to sqlalch...@googlegroups.com.
>>> To unsubscribe from this group, send email to 
>>> sqlalchemy+unsubscr...@googlegroups.com.
>>> For more options, visit this group 
>>> athttp://groups.google.com/group/sqlalchemy?hl=en.
>> 
>> 
> 
> -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to 
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at 
> http://groups.google.com/group/sqlalchemy?hl=en.
> 

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to