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:
parent
fb3a93975f
commit
e146dd75d9
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user