pymysql을 통해 쿼리 입력할 때, 아래와 같은 오류 문구를 만나곤 한다.

ValueError: unsupported format character 'Y' (0x59) at index

 

이는 쿼리의 변수 표현에 쓰이는 %s와 data format 변경하는 (예시에서는 DATE_FORMAT) 에서의 %를 구분해주지 않았기 때문이다.

SELECT DATE_FORMAT(DeviceReportedTime, '%Y-%m-%d %H:%i:%s') AS date, Facility, Priority, FromHost, FromIP, Message FROM SystemEvents WHERE DeviceReportedTime BETWEEN '%s 00:00:00' AND '%s 23:59:59' ORDER BY DeviceReportedTime DESC

위와 같이 작성하면 오류가 발생하는 것이다.

 

DATE_FORMAT 안의 %를 %%로 변경해주어 아래와 같은 코드로 변경해주자.

 

 

SELECT DATE_FORMAT(DeviceReportedTime, '%%Y-%%m-%%d %%H:%%i:%%s') AS date, Facility, Priority, FromHost, FromIP, Message FROM SystemEvents WHERE DeviceReportedTime BETWEEN '%s 00:00:00' AND '%s 23:59:59' ORDER BY DeviceReportedTime DESC

 

 

 

최종 정상 작동 코드 예시

target_date = '2023-12-17'

conn = pymysql.connect(host='666.777.888.999', port=3306, db='sample_DB', user='testuser', passwd='testpassword', charset='utf8')
curdic = conn.cursor(pymysql.cursors.DictCursor)

sql = "SELECT DATE_FORMAT(DeviceReportedTime, '%%Y-%%m-%%d %%H:%%i:%%s') AS date, Facility, Priority, FromHost, FromIP, Message FROM SystemEvents WHERE DeviceReportedTime BETWEEN '%s' AND '%s' ORDER BY DeviceReportedTime DESC"
curdic.execute(sql % (target_date+' 00:00:00', target_date+' 23:59:59'))

get_datas = curdic.fetchall()

 

 

+ Recent posts