如何在Django ORM中正确使用MySQL的CONVERT_TZ函数?
解决Django ORM调用MySQL CONVERT_TZ函数的FieldError问题
你遇到的问题是因为直接传递字符串时区参数时,Django ORM会将这些字符串解析为模型字段名,而非常量值,所以抛出了无法解析字段的错误。正确的做法是使用Value类来包装这些时区字符串,明确告诉Django这是要传递给SQL函数的常量参数。
正确代码示例
首先需要导入Value:
from django.db.models import Func, F, Value
然后修改你的查询代码:
boarding_stations = StationPoints.objects.filter( bus_id__in=bus_ids, station_id=sourceStation ).annotate( converted_timezone=Func( F('reachedTime'), Value('-08:00'), Value('+05:30'), function='CONVERT_TZ' ) )
额外注意事项
确保你的MySQL服务器已经正确加载了时区表,否则CONVERT_TZ函数可能会返回NULL。如果还没加载,可以执行MySQL自带的mysql_tzinfo_to_sql工具来导入时区数据。
内容的提问来源于stack exchange,提问作者Ajay Khrolia
相关产品推荐
相关产品推荐

