2016-09-17 32 views
0

我有一个Django API应用程序,运行在postgres上,使用TIME_ZONE='America/New_York'USE_TZ = TrueDjango使用不同的时区查询外部数据库

对于日常报告,我需要查询另一个数据库MySQL,并比较postgres数据库中的记录来检查一些更新。它们应该包含相同数量的结果。但是,MySQL DB的时区为UTC。我如何执行SELECT针对MySQL数据库的查询,使其与我的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"') 

回答

2

你需要的是将日期转换在MySQL匹配America/New_York时区。

实现该功能的功能将是CONVERT_TZ(),并且由于您首先需要命名时区,因此您需要设置time zone tables

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

SELECT COUNT(*) FROM mysql.time_zone_name; 

mysql_tzinfo_to_sql用于填充时区表。

如果您的时区是不是一个移动的一个,那么你可以通过显式输入,像这样的时间差与安全性较差,hardcored方法(不推荐)去:

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