mirror of
https://github.com/PyMySQL/mysqlclient.git
synced 2026-03-13 08:00:02 +08:00
Merge pull request #36 from Multiposting/master
Fix the conversion of list or tuple args to SQL.
This commit is contained in:
@@ -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,
|
||||
|
||||
@@ -180,7 +180,11 @@ 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 % dict((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)
|
||||
@@ -236,7 +240,13 @@ class BaseCursor(object):
|
||||
e = m.end(1)
|
||||
qv = m.group(1)
|
||||
try:
|
||||
q = [ qv % db.literal(a) for a in args ]
|
||||
q = []
|
||||
for a in args:
|
||||
if isinstance(a, dict):
|
||||
q.append(qv % dict((key, db.literal(item))
|
||||
for key, item in a.iteritems()))
|
||||
else:
|
||||
q.append(qv % tuple([db.literal(item) for item in a]))
|
||||
except TypeError, msg:
|
||||
if msg.args[0] in ("not enough arguments for format string",
|
||||
"not all arguments converted"):
|
||||
|
||||
Reference in New Issue
Block a user