-
python json int형 datetime으로 바꾸고 mysql에 insert하기데이터 분석/SQL 2021. 11. 12. 15:45
excel 엑셀 파일을 json으로 바꾼 뒤
한줄씩 불러들여 sql에 insert하려고 했더니, datetime table에 0000-00-00 00:00:00으로 들어갔다.
알고봤더니 쥬피터노트북에서는 cs_start_date 칼럼이 datetime형이었는데 엑셀에서 json 변환할 때
int형으로 바뀌었다.
1627689600000 라는 숫자는 timestamp로 바뀌었기 때문에 안의 날짜도 변형된 것이었다.
# Json 가져오기 with open('37900_customer_service_record.json', encoding='utf-8') as json_file: json_data = json.load(json_file) # print(json_data) # print(len(json_data)) # fileds : 컬럼명 # print(json_data[0])#1행 print(json_data[0]['cs_start_date'], type(json_data[0]['cs_start_date'])) print(json_data[0])
출력:
1627689600000 <class 'int'>
timestamp를 datetime형으로 바꿔주어야 한다.
먼저 datetime 라이브러리를 import한다
import datetime
json_line을 for문으로 한줄씩 읽어들여서 cs_start_date 칼럼의 값을 변수에 저장 후
datetime.fromtimestamp(cs_start_date / 1000) 으로 datetime형식으로 변환한다.
# table1 insert def insertsql_from_json(): curs = conn.cursor()#안 넣어주면 다른 function과 같이 돌릴 때 pymysql.err.Error: Already closed 발생 try: # Json 가져오기 with open('37900_customer_service_record.json', encoding='utf-8') as json_file: json_data = json.load(json_file) # json의 key로 접근 # #json_line : json 객체를 가지는 Array json_line = json_data # print(len(json_line)) for i in json_line: # customer_service_record id = i['id'] cs_assignee = 'cs_assignee' status = i['status'] cs_start_date = i['cs_start_date'] # timestamp->datetime으로 변환하는 법 md = datetime.fromtimestamp(cs_start_date / 1000) print(md) car_model_id = i['car_model_id'] cs_category_id = i['cs_category_id'] created_at = datetime.today().strftime("%Y/%m/%d %H:%M:%S") print(created_at) updated_at = datetime.today().strftime("%Y/%m/%d %H:%M:%S") contents = i['contents'] case_id = i['case_id'] # data insert sql_insert = "insert into customer_service_record(id, cs_assignee, status, cs_start_date, car_model_id, cs_category_id,created_at, updated_at, contents, case_id) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" #table 칼럼명과 같아야 함 try: curs.execute(sql_insert, (id, cs_assignee, status, md, car_model_id, cs_category_id,created_at, updated_at, contents, case_id)) rs = conn.commit() # enter # curs.excute 줄에 맞추면 마지막것만 들어감 print('success insert', rs) except Exception as e: print('error:', e) finally: curs.close()#문 제대로닫기
그리고 main.py에서 실행하면 제대로 date 값이 datetime 형식으로 들어가는 걸 알 수 있다
from db_bmwgs import insertsql_from_json, read insertsql_from_json() read()
datagrip에서 table에 값이 잘 들어갔는지 확인
반응형'데이터 분석 > SQL' 카테고리의 다른 글
Mysql 데이터베이스, 테이블 용량 조회하는 법 (0) 2021.12.08