ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.