4
我正在將'2012-09-10 00:00:00-05:00'
傳遞給MySQL查詢。使用Python的pytz module檢索此值。MySQL在Python中運行時發生查詢錯誤,但在直接運行時沒有發生錯誤
import pytz
class MyClass():
def __init____(self):
self.tz = pytz.timezone(settings.TIME_ZONE)
todaystart = self.tz.localize(datetime.now(self.tz).replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=None), is_dst=None).astimezone(self.tz)
MySQL查詢是這樣的,todaystart
已被取代後:
SELECT * FROM mytable WHERE created > UNIX_TIMESTAMP(STR_TO_DATE('2012-09-10 00:00:00-05:00','%Y-%m-%d %k:%i:%s') - INTERVAL 1 DAY);
如果我直接執行這個查詢,按預期的方式返回數據。如果我把這個查詢轉換成代碼它給這個錯誤:Warning: Truncated incorrect datetime value: '2012-09-09 00:00:00-05:00'
我使用的代碼是這樣的(內的Django):
query = """SELECT * FROM mytable WHERE created > UNIX_TIMESTAMP(STR_TO_DATE('2012-09-10 00:00:00-05:00','%Y-%m-%d %k:%i:%s') - INTERVAL 1 DAY);"""
myCursor = connections[system_db].cursor()
results = myCursor.execute(query) # Dies on this statement
resultcount = results.fetchall()
我沒有看到在MySQL的文檔進行偏移format串STR_TO_DATE。我寧願保留該偏移量,因爲數據是爲第三方系統返回的,並且保持原樣,所以我不必在返回和執行查詢之間執行任何邏輯與返回的日期。但是,我不認爲它與偏移量有關,因爲它可以直接運行它。
我做了什麼不正確的事情會導致這個Warning
在Python對MySQL運行查詢時出現?
MySQL的日期/時間格式不包括時區。您未在str_to_date的格式字符串中包含'-05:00',因此您會收到一條警告,提示該字符串已被截斷。警告不是一個錯誤,所以它應該在你的客戶中正常工作。 –
爲了在MySQL中保留時區信息,請在存儲它們之前將所有日期時間對象轉換爲UTC。 mysql命令行客戶端在它們發生時並不直接顯示警告,它只是提示它們('Query OK,1 row affected,1 warning(0.00 sec)')。其他客戶可能完全隱藏它們。 – Simon
這應該刪除時區信息:dt = dt_tz.replace(tzinfo =無) – user984003