2012-07-08 3 views
3

파이썬/MySQL의 datetime 형식에 문제가 있습니다. 2012-04-02 04:04:23과 같은 값을 산출잘못된 날짜/시간 값 : ''2012-07-14 23:00:00 ''

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) 

:

나는 (파이썬 사전에 의해 공급) 다음과 같은 스크립트를 사용하여 날짜를 계산합니다.

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 

내가 파이썬에서 날짜에 의해 삭제하는 방법 ? 동일한 변수를 삽입하면 (변경된 사항이 없음) 완벽하게 작동하므로 특히 혼란 스럽습니다.

+0

호기심에서 왜 datetime.strftime을 사용할 수있을 때 문자열을 작성해야합니까? – jdi

+0

이것은 파이썬을 처음 프로그래밍 한 것입니다. 이후로는 datetime으로 전환했습니다. 도와 주셔서 감사합니다! – Mark

답변

3

쿼리 문자열에 "%s"에 따옴표를 포함 할 수 없습니다. mysqldb 모듈은 그것들을 당신을 위해서 추가한다. (값을 따옴표로 넣지 않으려 고하는 너의 INSERT에서와 마찬가지이다.)

+0

완벽. 감사! 어리석은 실수는 또 다른 눈을 갖는 데 도움이됩니다. – Mark

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

+0

고마워, 내 코드를 바꿨어. 그러면 훨씬 깨끗해진다. – Mark