代码之家  ›  专栏  ›  技术社区  ›  Trace

Django DateTimeField收到一个简单的datetime

  •  0
  • Trace  · 技术社区  · 7 年前

    我的问题是,我似乎无法根据时间戳(即日期和时间戳)过滤数据 小时

    我的模型如下所示:

    # Create your models here.
    class HourlyTick(models.Model):
        id = models.IntegerField(primary_key=True)
        timestamp = models.DateTimeField(blank=True, null=True)
        symbol = models.TextField(blank=True, null=True)
        open = models.IntegerField(blank=True, null=True)
        high = models.IntegerField(blank=True, null=True)
        low = models.IntegerField(blank=True, null=True)
        close = models.IntegerField(blank=True, null=True)
        trades = models.IntegerField(blank=True, null=True)
        volume = models.IntegerField(blank=True, null=True)
        vwap = models.FloatField(blank=True, null=True)
    
        class Meta:
            managed = False
            db_table = 'xbtusd_hourly'
    

    我的看法是:

    class HourlyTickList(ListAPIView):
        serializer_class = HourlyTickSerializer
        def get(self, request):
            start = request.GET.get('start', None)
            end = request.GET.get('end', None)
            tz = pytz.timezone("Europe/Paris")
    
            start_dt = datetime.datetime.fromtimestamp(int(start) / 1000, tz)
            end_dt = datetime.datetime.fromtimestamp(int(end) / 1000, tz)
    
            qs = HourlyTick.objects.filter(timestamp__range = (start_dt, end_dt))
            rawData = serializers.serialize('python', qs)
            fields = [d['fields'] for d in rawData]
            fieldsJson = json.dumps(fields, indent=4, sort_keys=True, default=str)
    
            return HttpResponse(fieldsJson, content_type='application/json')
    

    我收到的信息是:

    RuntimeWarning:DateTimeField HourlyTick.timestamp收到未经验证的 时区支持处于活动状态时的日期时间(2017-01-15 06:00:00)。
    运行时警告)

    make_aware 要修复此错误,我将获得以下错误:

    ValueError:非原始日期时间(tzinfo已设置)

    我的数据库包含如下数据:

    2017-01-06T12:00:00.000Z

    我该如何解决这个问题?

    0 回复  |  直到 7 年前
        1
  •  0
  •   Trace    7 年前

    问题在于Python无法解释我存储在数据库中的格式。两种可能的解决方案:

    • 在Django中使用字符串转换编写原始查询
    • 以不同格式存储datetime字段

    我选择了选项2,因为它已经是一个自动检索数据的脚本,现在可以正常工作了。