diff options
author | Guillaume Bandet <gbandet@multiposting.fr> | 2013-11-04 16:17:57 +0100 |
---|---|---|
committer | Guillaume Bandet <gbandet@multiposting.fr> | 2013-11-04 16:17:57 +0100 |
commit | 87d1145c0d6ee4f5a8ecf6d5c62d2479b9cf27ea (patch) | |
tree | f2bb9fe8ddc860ee15c54636b894c6e7b1bdc4c3 | |
parent | c8b2744ea2b1e4419b7e3d93928e92c95f366815 (diff) | |
download | mysqldb1-87d1145c0d6ee4f5a8ecf6d5c62d2479b9cf27ea.tar.gz |
Fix the conversion of list or tuple args to a SQL.
When there is one element on the list, the generated SQL was
(1,) (python notation of a single element tuple, which is not
valid in SQL.
-rw-r--r-- | MySQLdb/converters.py | 7 | ||||
-rw-r--r-- | MySQLdb/cursors.py | 5 |
2 files changed, 9 insertions, 3 deletions
diff --git a/MySQLdb/converters.py b/MySQLdb/converters.py index 491d49b..26c1f90 100644 --- a/MySQLdb/converters.py +++ b/MySQLdb/converters.py @@ -129,13 +129,16 @@ def char_array(s): def array2Str(o, d): return Thing2Literal(o.tostring(), d) +def quote_tuple(t, d): + return "(%s)" % (','.join(escape_sequence(t, d))) + conversions = { IntType: Thing2Str, LongType: Long2Int, FloatType: Float2Str, NoneType: None2NULL, - TupleType: escape_sequence, - ListType: escape_sequence, + TupleType: quote_tuple, + ListType: quote_tuple, DictType: escape_dict, InstanceType: Instance2Str, ArrayType: array2Str, diff --git a/MySQLdb/cursors.py b/MySQLdb/cursors.py index 7e5a887..8815b80 100644 --- a/MySQLdb/cursors.py +++ b/MySQLdb/cursors.py @@ -180,7 +180,10 @@ class BaseCursor(object): if isinstance(query, unicode): query = query.encode(db.unicode_literal.charset) if args is not None: - query = query % db.literal(args) + if isinstance(args, dict): + query = query % {key: db.literal(item) for key, item in args.iteritems()} + else: + query = query % tuple([db.literal(item) for item in args]) try: r = None r = self._query(query) |