요즘 파이썬으로 작업 할 일이 조금 생겼는데, 처음 사용하는 언어기도 하고 이래저래 하다보니 또 여러 어려움에 봉착하는 중이다.
지금 파이썬을 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 되는거 확인했으니 작업 진행 해야지 홀홀홀
'Server > Python' 카테고리의 다른 글
[미해결] MySQL + Python + SALAlchemy (0) | 2025.03.04 |
---|---|
[python] python bash commend option (0) | 2021.04.09 |
[Python] Python 에 대해 주절주절 (0) | 2021.03.26 |
[python][error]Boto3 SignatureDoesNotMatch (0) | 2021.03.25 |
[python][error] lambda "Cannot load native module" (0) | 2021.03.18 |