2017-10-06 4 views
0

CSV 파일에서 MySQL에 INSERT하려고합니다. 파일의 '열' 이 형식 : 내 파이썬 스크립트에서 다음과 같은 오류가ValueError : 시간 데이터 '{0}'이 (가) '% d/% m/% Y'형식과 일치하지 않습니다.

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) 

:

31/08/2017; 

다음 테이블에 내 열이 YYYY-MM-DD

로 설정이 내 코드입니다 :

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

Ok. 우선 datetime.datetime.strptime ('{0}', '% d/% m/% Y')'이 경고를 주므로 MySQL과 관련이없는 것 같습니다. – sam

+0

문자열 '{0}'. format (your_date_string)과 같은 문자열을 형식화해야합니다. – temasso

답변

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 리더는 전체 행을 하나의 값으로 취했습니다.