충남대학교

수행일지

충남대학교 인턴여러분! 일일 업무 내용을 작성하여 주세요.

공지사항_view
제 목 10-29
날짜 2020-10-29 작성일 2020-10-29 조회수 18

데이터 파일의 전처리를 다 완료해서 이제 db에 insert할 때에 오류가 나지 않고 잘 insert된다.

각 테이블의 컬럼을 읽어와서 그 만큼 sql문을 만들어줘서 10만개씩 끊어서 commit해주면서 insert해주니 250만개 정도의 데이터가 15분정도 걸려서 들어갔다.

어제 딕셔너리 타입 사용하지 않을거라고 하셔서 다시 insert문을 수정해서 만들었다.

postgres로 들어가서 확인하니 잘 들어갔다.

 

밑에는 데이터를 읽어와서 db에 넣을 데이터 튜플을 준비해주는 코드이다.

 

def load_init_data(cursorconnfile_nametable_name): 
    filepath = os.path.join(FOLDER, file_name)

    try:

        datafile = open(filepath, mode='r'encoding='utf-8')
        csv_reader = csv.reader(datafile)

        bind_seprat_rows = list(csv_reader)
        num_rows = len(bind_seprat_rows)
        print("num rows ",num_rows)
        now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        current_time = f"{now}"
        # remove header
        bind_seprat_rows.pop(0)

        table_info_query = "SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = " +"'" +table_name +"'"+";"
        cursor.execute(table_info_query)
        tb_bind_seprat_columns = cursor.fetchall()
        print("len: ",len(tb_bind_seprat_columns))
        # build the column list of ewl_bcycl_bind table
        bind_seprat_column_list = []
        for icol in range(len(tb_bind_seprat_columns)):
            bind_seprat_column_list.append(tb_bind_seprat_columns[icol][1])

        bind_seprat_tuple_list = []
        # bind_tuple_list = []
        # seprat_tuple_list = []

        for arow in bind_seprat_rows :
            arow.append(f"{current_time}")
            if(table_name == "td_vw_sejong_station_info"):
                arow[4] = arow[4] +", "+arow[5]
                arow.pop(5)
            for i in range(len(tb_bind_seprat_columns)):
                if arow[i] == "" :
                    arow[i] = None
            bind_seprat_tuple_list.append(tuple(arow))
            # print(arow)
        print("arrow",bind_seprat_tuple_list[1])
        #     # build a row for ewl_bcycl_seprat
        #     aseprat_list = []
        #     for acolumn in seprat_column_list:
        #         if (acolumn in bind_seprat_column_list):
        #             aseprat_list.append(arow[bind_seprat_column_list.index(acolumn)])
        #         else:
        #             print("Error: ", acloumn, "is not defined in table ",
        #             tb_seprat.table_name)
        #     # print(aseprat_list)
        #     seprat_tuple_list.append(tuple(aseprat_list))

        #     # for ewl_bcycl_bind
        #     # build a list for a tuple to insert
        #     abind_list = []
        #     # build a row for ewl_bcycl_bind
        #     for acolumn in bind_column_list:
        #         if (acolumn in bind_seprat_column_list):
        #             abind_list.append(arow[bind_seprat_column_list.index(acolumn)])
        #         elif (acolumn == "holidays"):   # column specifies holiday
        #             lend_dt = abind_list[bind_column_list.index("lend_dt")][0:10]
        #             # print(lend_dt)
        #             abind_list.append(dt_lib.isworking_day(lend_dt))
        #         else:
        #             print("Error: ", acloumn, "is not defined in table ",
        #             tb_bind.table_name)
        #     # print(abind_list)
        #     bind_tuple_list.append(tuple(abind_list))

        # # Now, set up the list of tuples to insert and
        # # insert tuples into each table in bulk

        start = 0
        while start < num_rows:
            end = start + sub_len
            if end > num_rows :
                end = num_rows
            print(start, end)
            rows_to_insert = bind_seprat_tuple_list[start:end]
            insert_tuple(cursor, conn, table_name, rows_to_insert)
            # rows_to_insert = bind_tuple_list[start:end]
            # tb_bind.insert_tuple(rows_to_insert)
            # rows_to_insert = seprat_tuple_list[start:end]
            # tb_seprat.insert_tuple(rows_to_insert)
            start = end
            # print(type(rows_to_insert[0]), rows_to_insert[0])

    except (Exception, psycopg2.DatabaseError) as error:
        print(error)

    return tb_bind_seprat_columns

 

어제 만들어준 insert_tuple함수를 이용해 db에 넣어준다.

이전글 이전글이 없습니다.
다음글 다음글이 없습니다.
FAQ
새로 등록된 글이 없습니다.