mirror of
https://github.com/PyMySQL/mysqlclient.git
synced 2025-08-15 02:54:29 +08:00
Connection.literal() always returns str
instance.
This commit is contained in:
@ -13,6 +13,9 @@ from _mysql_exceptions import Warning, Error, InterfaceError, DataError, \
|
|||||||
NotSupportedError, ProgrammingError
|
NotSupportedError, ProgrammingError
|
||||||
import _mysql
|
import _mysql
|
||||||
import re
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
PY2 = sys.version_info[0] == 2
|
||||||
|
|
||||||
|
|
||||||
def defaulterrorhandler(connection, cursor, errorclass, errorvalue):
|
def defaulterrorhandler(connection, cursor, errorclass, errorvalue):
|
||||||
@ -280,7 +283,10 @@ class Connection(_mysql.connection):
|
|||||||
applications.
|
applications.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return self.escape(o, self.encoders)
|
s = self.escape(o, self.encoders)
|
||||||
|
if not PY2 and isinstance(s, bytes):
|
||||||
|
return s.decode('ascii', 'surrogateescape')
|
||||||
|
return s
|
||||||
|
|
||||||
def begin(self):
|
def begin(self):
|
||||||
"""Explicitly begin a connection. Non-standard.
|
"""Explicitly begin a connection. Non-standard.
|
||||||
|
@ -11,7 +11,7 @@ PY2 = sys.version_info[0] == 2
|
|||||||
|
|
||||||
from MySQLdb.compat import unicode
|
from MySQLdb.compat import unicode
|
||||||
|
|
||||||
restr = br"""
|
restr = r"""
|
||||||
\s
|
\s
|
||||||
values
|
values
|
||||||
\s*
|
\s*
|
||||||
@ -179,23 +179,12 @@ class BaseCursor(object):
|
|||||||
db = self._get_db()
|
db = self._get_db()
|
||||||
if PY2 and isinstance(query, unicode):
|
if PY2 and isinstance(query, unicode):
|
||||||
query = query.encode(db.unicode_literal.charset)
|
query = query.encode(db.unicode_literal.charset)
|
||||||
else:
|
|
||||||
def decode(x):
|
|
||||||
if isinstance(x, bytes):
|
|
||||||
x = x.decode('ascii', 'surrogateescape')
|
|
||||||
return x
|
|
||||||
|
|
||||||
if args is not None:
|
if args is not None:
|
||||||
if isinstance(args, dict):
|
if isinstance(args, dict):
|
||||||
if PY2:
|
args = dict((key, db.literal(item)) for key, item in args.iteritems())
|
||||||
args = dict((key, db.literal(item)) for key, item in args.iteritems())
|
|
||||||
else:
|
|
||||||
args = dict((key, decode(db.literal(item))) for key, item in args.items())
|
|
||||||
else:
|
else:
|
||||||
if PY2:
|
args = tuple(map(db.literal, args))
|
||||||
args = tuple(map(db.literal, args))
|
|
||||||
else:
|
|
||||||
args = tuple([decode(db.literal(x)) for x in args])
|
|
||||||
if not PY2 and isinstance(query, bytes):
|
if not PY2 and isinstance(query, bytes):
|
||||||
query = query.decode(db.unicode_literal.charset)
|
query = query.decode(db.unicode_literal.charset)
|
||||||
query = query % args
|
query = query % args
|
||||||
@ -246,8 +235,10 @@ class BaseCursor(object):
|
|||||||
del self.messages[:]
|
del self.messages[:]
|
||||||
db = self._get_db()
|
db = self._get_db()
|
||||||
if not args: return
|
if not args: return
|
||||||
if isinstance(query, unicode):
|
if PY2 and isinstance(query, unicode):
|
||||||
query = query.encode(db.unicode_literal.charset)
|
query = query.encode(db.unicode_literal.charset)
|
||||||
|
elif not PY2 and isinstance(query, bytes):
|
||||||
|
query = query.decode(db.unicode_literal.charset)
|
||||||
m = insert_values.search(query)
|
m = insert_values.search(query)
|
||||||
if not m:
|
if not m:
|
||||||
r = 0
|
r = 0
|
||||||
@ -277,7 +268,10 @@ class BaseCursor(object):
|
|||||||
exc, value, tb = sys.exc_info()
|
exc, value, tb = sys.exc_info()
|
||||||
del tb
|
del tb
|
||||||
self.errorhandler(self, exc, value)
|
self.errorhandler(self, exc, value)
|
||||||
r = self._query('\n'.join([query[:p], ',\n'.join(q), query[e:]]))
|
qs = '\n'.join([query[:p], ',\n'.join(q), query[e:]])
|
||||||
|
if not PY2:
|
||||||
|
qs = qs.encode(db.unicode_literal.charset, 'surrogateescape')
|
||||||
|
r = self._query(qs)
|
||||||
if not self._defer_warnings: self._warning_check()
|
if not self._defer_warnings: self._warning_check()
|
||||||
return r
|
return r
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user