Support %% and precedence spaces in Cursor.executemany()

This commit is contained in:
INADA Naoki 2016-05-10 00:52:00 +09:00
parent efd06ef265
commit 6bb4cdd69f
1 changed files with 6 additions and 3 deletions

View File

@ -12,8 +12,11 @@ from . import err
#: Regular expression for :meth:`Cursor.executemany`.
#: executemany only suports simple bulk insert.
#: You can use it to load large dataset.
RE_INSERT_VALUES = re.compile(r"""(INSERT\s.+\sVALUES\s+)(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))(\s*(?:ON DUPLICATE.*)?)\Z""",
re.IGNORECASE | re.DOTALL)
RE_INSERT_VALUES = re.compile(
r"\s*(INSERT\s.+\sVALUES\s+)" +
r"(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))" +
r"(\s*(?:ON DUPLICATE.*)?)\Z",
re.IGNORECASE | re.DOTALL)
class Cursor(object):
@ -170,7 +173,7 @@ class Cursor(object):
m = RE_INSERT_VALUES.match(query)
if m:
q_prefix = m.group(1)
q_prefix = m.group(1) % ()
q_values = m.group(2).rstrip()
q_postfix = m.group(3) or ''
assert q_values[0] == '(' and q_values[-1] == ')'