I forgot to mention where I stumbled about this.

Django has a wrapper:
http://code.djangoproject.com/browser/django/trunk/django/db/backends/util.py

            def execute(self, sql, params=()):
                start = time()
                try:
                    return self.cursor.execute(sql, params)
                finally:

Most people don't have a percent sign in the variable sql.

I guess
    cursor.execute(sql, None)
is not portable for all database backends.

I guess this should be the best solution:
if params:
    return self.cursor.execute(sql, params)
else:
    return self.cursor.execute(sql)

What do you think?

  Thomas

Thomas Guettler schrieb:
> Hi,
> 
> I discovered this:
> 
> import psycopg2
> connection=psycopg2.connect("dbname='...' user='...'")
> cursor=connection.cursor()
> cursor.execute('''SELECT '%' ''') # Does not fail
> cursor.execute('''SELECT '%' ''', ()) # Does fail
> 
> Traceback (most recent call last):
>   File "/localhome/modw/tmp/t.py", line 5, in <module>
>     cursor.execute('''SELECT '%' ''', ()) # Does fail
> IndexError: tuple index out of range
> 
> Is this a bug in psycopg2?
> 
> How do other PEP 249 implementation behave?
> 
>  Regards,
>    Thomas
> 
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to