From: Mike Bayer Date: Tue, 3 Apr 2007 18:08:51 +0000 (+0000) Subject: - slight tweak to raw execute() change to also support tuples, X-Git-Tag: rel_0_3_7~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=01683efe1d2ba1c663ac5d08416109fd16dd707d;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - slight tweak to raw execute() change to also support tuples, not just lists [ticket:523] --- diff --git a/CHANGES b/CHANGES index 083114e36b..a4af707ee5 100644 --- a/CHANGES +++ b/CHANGES @@ -39,6 +39,8 @@ an argument of NULL - query strings in unicode URLs get keys encoded to ascii for **kwargs compat + - slight tweak to raw execute() change to also support tuples + for positional parameters, not just lists [ticket:523] - orm: - corresponding to label/bindparam name generataion, eager loaders generate deterministic names for the aliases they create using diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index f5b4b377e4..6f0ff029a0 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -509,7 +509,7 @@ class Connection(Connectable): def execute_text(self, statement, *multiparams, **params): if len(multiparams) == 0: parameters = params - elif len(multiparams) == 1 and (isinstance(multiparams[0], list) or isinstance(multiparams[0], dict)): + elif len(multiparams) == 1 and (isinstance(multiparams[0], list) or isinstance(multiparams[0], tuple) or isinstance(multiparams[0], dict)): parameters = multiparams[0] else: parameters = list(multiparams) @@ -560,7 +560,7 @@ class Connection(Connectable): def _execute_raw(self, context): self.__engine.logger.info(context.statement) self.__engine.logger.info(repr(context.parameters)) - if context.parameters is not None and isinstance(context.parameters, list) and len(context.parameters) > 0 and (isinstance(context.parameters[0], list) or isinstance(context.parameters[0], dict)): + if context.parameters is not None and isinstance(context.parameters, list) and len(context.parameters) > 0 and (isinstance(context.parameters[0], list) or isinstance(context.parameters[0], tuple) or isinstance(context.parameters[0], dict)): self._executemany(context) else: self._execute(context) diff --git a/test/engine/execute.py b/test/engine/execute.py index ce60a21c76..85b24be335 100644 --- a/test/engine/execute.py +++ b/test/engine/execute.py @@ -25,11 +25,13 @@ class ExecuteTest(testbase.PersistTest): @testbase.supported('sqlite') def test_raw_qmark(self): for conn in (testbase.db, testbase.db.connect()): - conn.execute("insert into users (user_id, user_name) values (?, ?)", [1,"jack"]) - conn.execute("insert into users (user_id, user_name) values (?, ?)", [2,"ed"], [3,"horse"]) - conn.execute("insert into users (user_id, user_name) values (?, ?)", 4, 'sally') + conn.execute("insert into users (user_id, user_name) values (?, ?)", (1,"jack")) + conn.execute("insert into users (user_id, user_name) values (?, ?)", [2,"fred"]) + conn.execute("insert into users (user_id, user_name) values (?, ?)", [3,"ed"], [4,"horse"]) + conn.execute("insert into users (user_id, user_name) values (?, ?)", (5,"barney"), (6,"donkey")) + conn.execute("insert into users (user_id, user_name) values (?, ?)", 7, 'sally') res = conn.execute("select * from users") - assert res.fetchall() == [(1, "jack"), (2, "ed"), (3, "horse"), (4, 'sally')] + assert res.fetchall() == [(1, "jack"), (2, "fred"), (3, "ed"), (4, "horse"), (5, "barney"), (6, "donkey"), (7, 'sally')] conn.execute("delete from users") @testbase.supported('mysql')