mysql - Django 使用不同时区查询外部数据库

标签 mysql django database postgresql

我有一个在 postgres 上运行的 Django API 应用程序,其中使用 TIME_ZONE='America/New_York'USE_TZ = True

对于每日报告,我需要查询另一个数据库 MySQL,并比较 postgres DB 中的记录以检查是否有一些更新。它们应该包含相同数量的结果。然而,MySQL 数据库的时区是 UTC。如何对 MySQL 数据库执行 SELECT 查询以使其与 postgres 数据库上的相同日期范围匹配?

示例: 这两个查询应返回相同数量的结果

# Django/Postgres with TIME_ZONE='America/New_York'`
MyObject.objects.filter(created_on__date=date(2016, 9, 17))

# External MySQL Databse in UTC
sql.execute('SELECT * from MY_TABLE where created_on BETWEEN "2016-09-17" AND "2016-09-18"')

最佳答案

您需要将 MySQL 中的日期转换为匹配 America/New_York 时区。

实现这一点的函数是 CONVERT_TZ()由于您首先需要命名时区,因此需要设置 time zone tables .

如果您不确定命名时区是否可用,请在查询下发出问题 - 如果它返回零,则表为空,因此使用命名时区不可用,您需要填充它们(我已经提到了上面文档的链接)。

SELECT COUNT(*) FROM mysql.time_zone_name;

mysql_tzinfo_to_sql用于填充时区表。

如果您的时区不是移动的时区,那么您可以通过明确输入时差来采用不太安全的硬核方法(不推荐),如下所示:

mysql> SELECT CONVERT_TZ('2016-09-17 10:00:00','+00:00','+06:00');
        -> '2016-09-17 16:00:00' -- Result

关于mysql - Django 使用不同时区查询外部数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39551254/

相关文章:

mysql - 博客文章表结构-MySQL

mysql - 如何使用 SQL 中上一行的值

mysql - 具有内连接、子选择和限制的 SQL 选择

mysql - 使用中间表的另一个数据库中另一个表的列的部分数据更新列

mysql - 按 max() 排序

python - 由 Web 应用程序而不是服务器协调的 HTTP 身份验证

django - 无法以 super 用户身份登录 Django 项目

python - uWSGI找不到所有Python安装中都存在的模块

php - native 客户端应用程序必须访问 mysql 服务器端数据库

mysql - 如何插入到另一个数据库服务器