Tengo el siguiente modelo:
class Statistic(models.Model): meter = models.ForeignKey(Meter, on_delete=models.CASCADE, db_index=True) timestamp_start = models.DateTimeField(db_index=True) timestamp_end = models.DateTimeField(db_index=True) usage_start = models.DecimalField(max_digits=10, decimal_places=3) usage_end = models.DecimalField(max_digits=10, decimal_places=3) return_start = models.DecimalField(max_digits=10, decimal_places=3) return_end = models.DecimalField(max_digits=10, decimal_places=3)Tengo el siguiente valor en el primer registro de timestamp_start en mi base de datos sqllite
2016-12-22T06:15:30.420+02:00Cuando ejecuto la siguiente consulta:
statistics = Statistic.objects.filter(id=1) .annotate(timestamp=Trunc('timestamp_start','day', output_field=DateTimeField())) .values('timestamp') .annotate(usage_start = Min('usage_start'))la marca de tiempo da como resultado Ninguno
QuerySet [{'usage_start': Decimal('136.972'), 'timestamp': Ninguno}]
Cuando adjunto el depurador y verifico los primeros registros de mi tabla de estadísticas como este
Statistics.objects.all()[0].timestamp_startvuelve:
fechahora.fechahora(2016, 12, 22, 6, 0)
Antes de enfrentar este problema, obtuve esta excepción:
La base de datos devolvió un valor de fecha y hora no válido. ¿Están instaladas las definiciones de zona horaria para su base de datos y pytz?
Tengo pytz instalado. Pero no tengo idea de cómo arreglar esto. ¿El valor es incorrecto? De todos modos, al final configuré use_tz en settings.py en falso. La excepción desapareció pero trunc no devuelve ninguno ahora. ¿Esto está causando el problema?
pd: Mi entorno Python 3, Django, base de datos Sql lite, windows
Probablemente no haya cargado los datos de la zona horaria en mysql. TruncDate usa la función CONVERT_TZ bajo el capó, que devuelve NULL si no hay datos de zona horaria disponibles. Puede verificar qué SQL está usando la consulta evaluando lo siguiente:
str(statistics.query)Las instrucciones de Windows para cargar datos de zona horaria se pueden encontrar aquí:
Me encontré con este problema en Linux y lo resolví como se indica en esta otra publicación de StackOverflow: