Skip to content

Commit

Permalink
Fix dropbox#50 executemany failed when insert a batch of data to a Hi…
Browse files Browse the repository at this point in the history
…ve table
  • Loading branch information
taogeYT committed May 14, 2020
1 parent ee86ab7 commit 333d0d1
Showing 1 changed file with 21 additions and 6 deletions.
27 changes: 21 additions & 6 deletions pyhive/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import datetime
from future.utils import with_metaclass
from itertools import islice
import re


class DBAPICursor(with_metaclass(abc.ABCMeta, object)):
Expand Down Expand Up @@ -85,12 +86,26 @@ def executemany(self, operation, seq_of_parameters):
Return values are not defined.
"""
for parameters in seq_of_parameters[:-1]:
self.execute(operation, parameters)
while self._state != self._STATE_FINISHED:
self._fetch_more()
if seq_of_parameters:
self.execute(operation, seq_of_parameters[-1])
from .hive import _escaper
match_insert_sql = re.compile(
r"\s*((?:INSERT)\b.+\bVALUES?\s*)(\(\s*(?:%s|%\(.+\)s)\s*(?:,\s*(?:%s|%\(.+\)s)\s*)*\))",
re.IGNORECASE | re.DOTALL)
match = match_insert_sql.match(operation)
if match:
part1, part2 = match.group(1), match.group(2).rstrip()
values = []
for parameter in seq_of_parameters:
record = part2 % _escaper.escape_args(parameter)
values.append(record)
sql = part1 + ",".join(values)
self.execute(sql)
else:
for parameters in seq_of_parameters[:-1]:
self.execute(operation, parameters)
while self._state != self._STATE_FINISHED:
self._fetch_more()
if seq_of_parameters:
self.execute(operation, seq_of_parameters[-1])

def fetchone(self):
"""Fetch the next row of a query result set, returning a single sequence, or ``None`` when
Expand Down

0 comments on commit 333d0d1

Please sign in to comment.