You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:32:02