[1.11.x] Fixed #28138 -- Used output type handler instead of numbersAsStrings on Oracle cursor.
Thanks Tim Graham for the review.
Backport of 946775227c
from master
This commit is contained in:
parent
e93135b067
commit
d52577b62b
|
@ -400,11 +400,24 @@ class FormatStylePlaceholderCursor(object):
|
|||
|
||||
def __init__(self, connection):
|
||||
self.cursor = connection.cursor()
|
||||
# Necessary to retrieve decimal values without rounding error.
|
||||
self.cursor.numbersAsStrings = True
|
||||
self.cursor.outputtypehandler = self._output_type_handler
|
||||
# Default arraysize of 1 is highly sub-optimal.
|
||||
self.cursor.arraysize = 100
|
||||
|
||||
@staticmethod
|
||||
def _output_type_handler(cursor, name, defaultType, length, precision, scale):
|
||||
"""
|
||||
Called for each db column fetched from cursors. Return numbers as
|
||||
strings so that decimal values don't have rounding error.
|
||||
"""
|
||||
if defaultType == Database.NUMBER:
|
||||
return cursor.var(
|
||||
Database.STRING,
|
||||
size=255,
|
||||
arraysize=cursor.arraysize,
|
||||
outconverter=str,
|
||||
)
|
||||
|
||||
def _format_params(self, params):
|
||||
try:
|
||||
return {k: OracleParam(v, self, True) for k, v in params.items()}
|
||||
|
|
Loading…
Reference in New Issue