본문 바로가기

Server/Python

[python] mysql insert datetime

요즘 파이썬으로 작업 할 일이 조금 생겼는데, 처음 사용하는 언어기도 하고 이래저래 하다보니 또 여러 어려움에 봉착하는 중이다.

지금 파이썬을 mysql 에 연동해서 사용하려 하는데, insert 처리를 할 때 datetime 형의 데이터가 있으면 처리가 안되는 현상이 발생한다. 파이썬에서는 string으로 되어있는 데이터를 DB에 datetime으로 설정된 컬럼에 insert 하려고 하면 튕겨나오는 것 같다. 웃기는건 이럴땐 파이썬에서 에러도 안 난다는 거임.

%s 를 사용하는 방법도 있긴 한데, 동적으로 쿼리빌더같은걸 만들려다 보니

insert into table (col1, col2, col3...) values (%s, %s, %s,,,)

형식으로 코딩해두는건 지양하고 싶어서 암튼 다른 방법을 찾아보는데 보아하니 pymysql 에서는 %s 가 string 의 s 가 아니라 그냥 동적 값이라는걸 의미하고, 자료형 관계 없이 모두 string으로 들어간다는 것 같다. 생각해보면 애초에 sql문 자체가 string 으로 작성돼서 처리되니 당연한 말 같기도.

암튼 결론은 간단했음. 그냥 문자열을 쌍따옴표(")로 묶고 내부 value 값을 홑따옴표(')로 처리했다

insert into table (col1, col2, ..., coln) values ('val1', 'val2', ... , 'valn') 이런식으로 되게

그리고 저렇게 명시하는 대신 insert 데이터를 dict 값으로 받아서 for 문으로 돌리면서 sql문을 조합하는 방식으로 처리함

def makeInsertValue(self, opts):
	columns = []
	values = []
	if type(opts) != type({}):
		return 0

    for opt in opts:
        columns.append(opt)
        values.append( "'"+str(opts[opt])+"'" )

    column = ', '.join(columns)
    value = ', '.join(values)
    sql = "("+column+") values ("+value+")"

	return sql

이렇게

암튼 이제 insert 되는거 확인했으니 작업 진행 해야지 홀홀홀