2016-09-17 100 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