In article <6b085f98-0d19-4572-be92-4fb1764a2...@googlegroups.com>, Miki Tebeka <miki.teb...@gmail.com> wrote:
> > I can catch the exception, but don't see any way to tell which row caused > > the problem. Is this information obtainable, short of retrying each row > > one by one? > One way to debug this is to wrap the iterable passed to executemany with one > that remembers the last line. Something like: > > class LastIterator(object): > def __init__(self, coll): > self.it = iter(coll) > self.last = None > > def __iter__(self): > return self > > def next(self): > self.last = next(self.it) > return self.last > > ... > li = ListIterator(items) > try: > cursor.executemany(sql, li) > except SQLError, e: > print('Error: {}, row was {}'.format(e, li.last)) This assumes that the exception is raised synchronously with iterating over the input. The whole idea of executemany() is to batch up rows and send them to the database as a single unit, so this would almost certainly not be a good assumption. -- http://mail.python.org/mailman/listinfo/python-list