Fix encoding/decoding in adapter/converter of sqlite for Python3

bytes must be used when storing raw values of adapter in blob
bytes is received by the converter and so it must be decoded into unicode

issue3211
This commit is contained in:
Cédric Krier committed 2015-03-19 21:44:54 +01:00
1 parent 01a7cc59a8
commit 4be42a5b50
1 file changed
+3 -3
+3 -3
View File
@@ -419,12 +419,12 @@ class Cursor(CursorInterface):
def has_constraint(self):
return False
sqlite.register_converter('NUMERIC', lambda val: Decimal(val))
sqlite.register_converter('NUMERIC', lambda val: Decimal(val.decode('utf-8')))
if sys.version_info[0] == 2:
sqlite.register_adapter(Decimal, lambda val: buffer(str(val)))
sqlite.register_adapter(bytearray, lambda val: buffer(val))
else:
sqlite.register_adapter(Decimal, lambda val: bytes(str(val)))
sqlite.register_adapter(Decimal, lambda val: str(val).encode('utf-8'))
def adapt_datetime(val):
@@ -432,7 +432,7 @@ def adapt_datetime(val):
sqlite.register_adapter(datetime.datetime, adapt_datetime)
sqlite.register_adapter(datetime.time, lambda val: val.isoformat())
sqlite.register_converter('TIME', lambda val: datetime.time(*map(int,
val.split(':'))))
val.decode('utf-8').split(':'))))
sqlite.register_adapter(datetime.timedelta, lambda val: val.total_seconds())