From 6377a2c893720aed444b41a6d176236c8819dfba Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Wed, 1 Feb 2017 20:59:55 -0500 Subject: [PATCH 1/3] Allow semicolon at the end of bulk insert query --- pymysql/cursors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysql/cursors.py b/pymysql/cursors.py index 41284538..7dbb29e1 100644 --- a/pymysql/cursors.py +++ b/pymysql/cursors.py @@ -14,7 +14,7 @@ RE_INSERT_VALUES = re.compile( r"\s*((?:INSERT|REPLACE)\s.+\sVALUES?\s+)" + r"(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))" + - r"(\s*(?:ON DUPLICATE.*)?)\Z", + r"(\s*(?:ON DUPLICATE.*)?)(;\s*)\Z", re.IGNORECASE | re.DOTALL) From a97314392254851e49c02073dc1428b859167d5e Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Thu, 2 Feb 2017 02:12:45 -0500 Subject: [PATCH 2/3] make semicolon optional --- pymysql/cursors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysql/cursors.py b/pymysql/cursors.py index 7dbb29e1..1cd9549c 100644 --- a/pymysql/cursors.py +++ b/pymysql/cursors.py @@ -14,7 +14,7 @@ RE_INSERT_VALUES = re.compile( r"\s*((?:INSERT|REPLACE)\s.+\sVALUES?\s+)" + r"(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))" + - r"(\s*(?:ON DUPLICATE.*)?)(;\s*)\Z", + r"(\s*(?:ON DUPLICATE.*)?)(;*\s*)\Z", re.IGNORECASE | re.DOTALL) From b779f1f850f9da7771bbf338892ca971faf68e15 Mon Sep 17 00:00:00 2001 From: Guangyang Li Date: Thu, 2 Feb 2017 02:26:05 -0500 Subject: [PATCH 3/3] update the regex for semicolon --- pymysql/cursors.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pymysql/cursors.py b/pymysql/cursors.py index 1cd9549c..dc3ce1e4 100644 --- a/pymysql/cursors.py +++ b/pymysql/cursors.py @@ -14,7 +14,7 @@ RE_INSERT_VALUES = re.compile( r"\s*((?:INSERT|REPLACE)\s.+\sVALUES?\s+)" + r"(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))" + - r"(\s*(?:ON DUPLICATE.*)?)(;*\s*)\Z", + r"(\s*(?:ON DUPLICATE.*)?);?\s*\Z", re.IGNORECASE | re.DOTALL)