engine.execute raised exception when given empty list

Issue #1175 resolved
Former user created an issue

The following code:

engine.execute(person_table.insert(), [this exception: Traceback (most recent call last): ... File "c:\python25\lib\site-packages\SQLAlchemy-0.5.0rc1-py2.5.egg\sqlalchemy\e ngine\base.py", line 1220, in execute return connection.execute(statement, multiparams, *params) File "c:\python25\lib\site-packages\SQLAlchemy-0.5.0rc1-py2.5.egg\sqlalchemy\e ngine\base.py", line 848, in execute return Connection.executorsc

raises)(self, object, multiparams, params) File "c:\python25\lib\site-packages\SQLAlchemy-0.5.0rc1-py2.5.egg\sqlalchemy\e ngine\base.py", line 894, in execute_clauseelement params = self.__distill_params(multiparams, params) File "c:\python25\lib\site-packages\SQLAlchemy-0.5.0rc1-py2.5.egg\sqlalchemy\e ngine\base.py", line 876, in __distill_params if isinstance(multiparams00, (list, tuple, dict)): IndexError: list index out of range

I think it should return an empty result instead.

Comments (3)

  1. Mike Bayer repo owner

    patch:

    Index: lib/sqlalchemy/engine/base.py
    ===================================================================
    --- lib/sqlalchemy/engine/base.py   (revision 5122)
    +++ lib/sqlalchemy/engine/base.py   (working copy)
    @@ -873,7 +873,7 @@
                     return [{}]({})
             elif len(multiparams) == 1:
                 if isinstance(multiparams[0](0), (list, tuple)):
    -                if isinstance(multiparams[0](0)[0](0), (list, tuple, dict)):
    +                if not multiparams[0](0) or isinstance(multiparams[0](0)[0](0), (list, tuple, dict)):
                         return multiparams[0](0)
                     else:
                         return [multiparams[0](multiparams[0)]
    
  2. Log in to comment