2017-10-06 493 views
0

我試圖從CSV文件插入MySQL,文件中的第一個'列'是日期這種格式:ValueError:時間數據'{0}'與格式'%d /%m /%Y'不匹配

31/08/2017; 

然後我在表列設置爲YYYY-MM-DD

這是我的代碼:

import datetime 
    import csv 
    import MySQLdb 
    ... 
    insertionSQL="INSERT INTO transactions (trans_date, trans_desc, trans_amnt) VALUES(" + datetime.datetime.strptime('{0}', '%d/%m/%Y').strftime('%Y-%m-%d') + ",{2},{3}), row)" 
    cur.execute(insertionSQL) 

我從我的Python腳本收到以下錯誤:

(data_string, format)) 
    ValueError: time data '{0}' does not match format '%d/%m/%Y' 
+0

好的。首先,這似乎與MySQL無關,因爲'datetime.datetime.strptime('{0}','%d /%m /%Y')給出了這個警告。 – sam

+0

您應格式化字符串,即「{0}」格式(your_date_string)。 – temasso

回答

0

您應該在查詢執行過程中執行日期格式化邏輯。你不能只將邏輯放入插入查詢字符串中,並期望它能正常工作(正如你所看到的,strptime試圖將字符串{0}根據日期格式字符串轉換成日期對象,這顯然不能工作!)

insertionSQL = "INSERT INTO transactions (trans_date, trans_desc, trans_amnt) VALUES(%s, %s, %s)" 
    ... # read csv 
    # Reformat the date on the actual data from the CSV! 
    csv_date = datetime.datetime.strptime(csv_date, '%d/%m/%Y').strftime('%Y-%m-%d') 
    # Now all of your input data is formatted correctly, execute the prepared statement. 
    cursor.execute(insertionSQL, (csv_date, csv_desc, csv_amnt)) 
0

我發現了這個問題。我缺少分隔符=「;」所以csv閱讀器將整行作爲一個值

相關問題