1
0
mirror of https://github.com/django/django.git synced 2025-07-04 09:49:12 +00:00

boulder-oracle-sprint: Worked around cx_Oracle returning

datetime.datetime objects for DATE cols when Django wants a 
datetime.date.


git-svn-id: http://code.djangoproject.com/svn/django/branches/boulder-oracle-sprint@4081 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Boulder Sprinters 2006-11-16 21:30:37 +00:00
parent fb3a93975f
commit e146dd75d9

View File

@ -1,3 +1,4 @@
import datetime
from django.db import backend, connection from django.db import backend, connection
# TODO: Why the frack can't I just import get_cached_row? # TODO: Why the frack can't I just import get_cached_row?
#from django.db.models.query import get_cached_row #from django.db.models.query import get_cached_row
@ -70,15 +71,23 @@ def get_query_set_class(DefaultQuerySet):
# 1. retrieve each row in turn # 1. retrieve each row in turn
# 2. convert NCLOBs # 2. convert NCLOBs
def resolve_lobs(row): def resolve_cols(row):
for field in row: for field in row:
if isinstance(field, Database.LOB): if isinstance(field, Database.LOB):
yield str(field) yield str(field)
# cx_Oracle returns datetime.datetime objects for DATE
# columns, but Django wants a datetime.date.
# A workaround is to return a date if time fields are 0.
# A safer fix would involve either patching cx_Oracle,
# or checking the Model here, neither of which is good.
elif isinstance(field, datetime.datetime) and \
field.hour == field.minute == field.second == field.microsecond == 0:
yield field.date()
else: else:
yield field yield field
for unresolved_row in cursor: for unresolved_row in cursor:
row = list(resolve_lobs(unresolved_row)) row = list(resolve_cols(unresolved_row))
if fill_cache: if fill_cache:
obj, index_end = get_cached_row(self.model, row, 0) obj, index_end = get_cached_row(self.model, row, 0)
else: else: