2012-07-08 40 views
3

我在使用Python/MySQL的日期時間格式時遇到了一些麻煩。不正確的日期時間值:''2012-07-14 23:00:00''

我計算使用下面的腳本(用Python字典饋送)的日期時間:

tempDate = str(eachday.get("date").get("year")).zfill(4) + "-" + 
str(eachday.get("date").get("month")).zfill(2) + "-" + 
str(eachday.get("date").get("day")).zfill(2) + " " + 
str(eachday.get("date").get("hour")).zfill(2) + ":" + 
str(eachday.get("date").get("min")).zfill(2) + ":" + 
str(eachday.get("date").get("sec")).zfill(2) 

其中產量,看起來像2012-04-02 04:04:23的值。

我可以插入MySQL沒有任何問題。

sql.execute("""INSERT INTO `db`.`table`(`id`, `fk_id`, `time`, `field1`, `field2`) VALUES (NULL, %s, %s, %s, %s);""", (fk_value, tempDate, value1, value2)) 
DB_CONN.commit() 

但是,當我嘗試用日期時間刪除任何內容,

sql.execute("""DELETE FROM `db`.`table` WHERE `time` = "%s";""", (tempDate)) 
DB_CONN.commit() 

它返回有關一個不正確的日期時間值警告:

Warning: Incorrect datetime value: ''2012-07-17 23:00:00'' for column 'time' at row 1 

我如何通過日期時間在Python中刪除?這是特別令人困惑的,因爲插入相同的變量(沒有改變)完美地工作。

+0

出於好奇,爲什麼這麼多的工作來建立一個字符串,當你可以使用datetime.strftime? – jdi 2012-07-08 23:28:24

+0

這是我第一次編程Python。我已經將它切換到日期時間,如下所示。謝謝您的幫助! – Mark 2012-07-10 20:50:45

回答

3

您不能在查詢字符串中包含引號"%s";該MySQLdb的模塊增加了他們爲你(同它在你的INSERT,你不要試圖把周圍的值引號......一樣)

+0

完美。謝謝!愚蠢的錯誤,有助於擁有另一雙眼睛。 – Mark 2012-07-08 23:31:25

2

您可以輕鬆地利用datetime模塊,這是一個很大的的控制建設日期字符串:

from datetime import datetime 

eachday = { 
    'date': { 
     'day': 2, 
     'hour': 4, 
     'min': 4, 
     'month': 4, 
     'sec': 23, 
     'year': 2012 
    } 
} 
keys = ('year','month','day','hour','min','sec') 
dt = datetime(*(eachday['date'][k] for k in keys)) 
print dt.strftime('%Y-%m-%d %H:%M:%S') 
# '2012-04-02 04:04:23' 

有日期時間堅持的好處,在於它的原始格式,你會從MySQLdb的反正獲得。您可以將其作爲無轉換的值傳遞給它。所以真的,格式化日期字符串甚至不需要。

sql.execute("DELETE FROM `db`.`table` WHERE `time`=%s", (dt,)) 

最好將日期時間值保留爲儘可能長的日期時間對象,而不是攜帶int組件。

+0

好吧,我一定會記住這一點。謝謝! – Mark 2012-07-09 01:59:48

+0

謝謝,我已將我的代碼切換出來,而且看起來更清潔! – Mark 2012-07-10 20:51:01