'''Execute a parameterized psycopg3 statement
Must be mixed in with a DataLineProcessor.
'''
- def param_execute(self, insert_stmt, udl):
- try:
- self.cur.execute(insert_stmt, udl.tuples)
- except IndexError as exp:
- raise core_ex.TooFewColsError(
- udl.lineno,
- 'Line has too few columns',
- 'Fewer columns than column headings',
- f'The IndexError from psycopg3 is: ({exp})',
- data=udl.raw)
- except UnicodeEncodeError as exp:
- self.raise_encoding_error(
- exp, udl, self.cur.connection.encoding, False)
- except psycopg.errors.UntranslateableCharacter as exp:
- self.raise_encoding_error(
- exp, udl, self.ue.server_encoding(), True)
-
- def raise_encoding_error(self, exp, udl, encoding, server_side):
- errors = []
- cnt = 1
+ def connection_details(self, server_side):
if server_side:
description = ("Data cannot be represented in the"
" character encoding of the database")
+ encoding = self.ue.server_encoding()
else:
description = ("Data cannot be represented in the database"
" connection's client-side character encoding")
+ encoding = self.cur.connection.encoding
+ return (description, encoding)
+
+ def raise_encoding_error(self, exp, udl, server_side):
+ errors = []
+ cnt = 1
+ (description, encoding) = self.connection_details(server_side)
for col in udl.tuples:
try:
col.encode(encoding=encoding)
str(exp),
data=udl.raw)
+ def param_execute(self, insert_stmt, udl):
+ try:
+ self.cur.execute(insert_stmt, udl.tuples)
+ except IndexError as exp:
+ raise core_ex.TooFewColsError(
+ udl.lineno,
+ 'Line has too few columns',
+ 'Fewer columns than column headings',
+ f'The IndexError from psycopg3 is: ({exp})',
+ data=udl.raw)
+ except UnicodeEncodeError as exp:
+ self.raise_encoding_error(exp, udl, False)
+ except psycopg.errors.UntranslateableCharacter as exp:
+ self.raise_encoding_error(exp, udl, True)
+
class DataLineProcessor(object):
'''