inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[리뉴얼] 처음하는 SQL과 데이터베이스(MySQL) 부트캠프 [입문부터 활용까지]

크롤링 결과를 DB에 저장하는 단계에서 PRIMARY KEY로 인해 중복되는 상품이 누락되는 문제

342

설코딩

작성한 질문수 4

0

크롤링한 데이터를 db에 저장하면서 PRIMARY KEY 를 item_code 로 정할시 모든 데이터가 추출되지는 않는 것 같습니다.

sql = """SELECT COUNT(*) FROM items WHERE item_code = '""" + item_info['item_code'] + """';"""

위 구문때문에 pk  중복되는 에러는 발생하진 않지만,

특정 상품이 메인과 서브카테고리에 중복되게 존재하는 경우에는 데이터가 누락되네요

물론 학습하는데는 큰 상관은 없습니다만....

실제 현업에서 이런문제가 발생하면 어떻게 해결하시는지 궁금합니다.

제 생각에는 테이블을 다시 정의해야 할것 같은데 

"id INT NOT NULL AUTO_INCREMENT PRIMARY KEY" 이런식으로 해도 될거같긴 하지만

현업에서는 이런 경우에는 PRIMARY KEY를 어떤식으로 정하시나요?

P.S. 좋은 강의 항상 감사합니다.

python sql DBMS/RDBMS mysql 데이터 엔지니어링

답변 1

1

잔재미코딩 DaveLee

안녕하세요. 강의에 첨부된 mysql_advance_with_pymysql.zip 파일의 mysql_advance_with_pymysql.py 파일을 보시면,

다음과 같이 items에 동일 item_code가 있을 경우에는 items에는 해당 상품 정보를 넣지 않지만,

ranking  테이블에는 items에 해당 item_code가 있던 없던, 해당 item_code를 기반으로 메인/서브 카테고리 모두 랭킹을 기록하고 있습니다.

그래서 말씀하신 문제가 생기지 않도록 해놓았습니다.

테이블을 두개로 나누면서,

ranking 테이블에서는 메인/서브 카테코리 랭킹 정보를 모두 기록하고, 사용되는 item에 대해서는 해당 item을 식별할 수 있는 item_code만을 기재해놓고,

items 테이블에서는 메인/서브 카테고리 랭킹에서 사용되는 item을 중복되지 않게만 저장합니다.

그래서 ranking 정보는 결과적으로 ranking 테이블만 확인해보면 누락없이 모두 알 수 있습니다.

도움이 되셨는지 모르겠습니다. 감사합니다.~

---------

def save_data(item_info):

    sql = """SELECT COUNT(*) FROM items WHERE item_code = '""" + item_info['item_code'] + """';"""

    cursor.execute(sql)

    result = cursor.fetchone()

    if result[0] == 0:

        sql = """INSERT INTO items VALUES('""" + item_info['item_code'] + """',

        '""" + item_info['title'] + """', 

        """ + str(item_info['ori_price']) + """, 

        """ + str(item_info['dis_price']) + """, 

        """ + str(item_info['discount_percent']) + """, 

        '""" + item_info['provider'] + """')"""

        cursor.execute(sql)

---> 이 부분은 if 구문 바깥쪽에 기재해놓았기 때문에, if 구문으로 item이 중복되든, 안되는 무조건 실행되도록 해놓았습니다.

    sql = """INSERT INTO ranking (main_category, sub_category, item_ranking, item_code) VALUES('""" + item_info[

        'category_name'] + """',

    '""" + item_info['sub_category_name'] + """', 

    '""" + str(item_info['ranking']) + """', 

    '""" + item_info['item_code'] + """')"""

    cursor.execute(sql)

FOREIGN KEY 정리하기, 영상대로 SQL코드 복붙해도 안되요.

0

18

1

실습을 따라하는데 데이터베이스가 보이지 않아요

0

55

1

섹션1 4강부터 강의 실행 안됨 이슈

0

77

1

강의 자료 다운로드 관

0

91

1

강의 영상이 안나와요..

0

83

1

섹션4 화면 자체가 안나와요

0

118

1

강의 화면이 안 보이고, 목소리밖에 안나와요 ;;

0

116

1

데이터 삭제 질문

0

123

1

mysql 설치가 되지 않습니다.

0

1390

3

강의 결과 질문 - SQLD, 데이터베이스 설계, 프로젝트 구축 하여 취업

0

147

1

지마켓 파일 불러왔는데, 테이블이 생성이 안됩니다

0

119

1

실습 코드 깃허브 업로드

0

145

1

sql_safe_updates 옵션

0

154

1

sql 설치 문제

0

1424

2

서브쿼리를 JOIN으로 바꾸기

0

157

1

중고급 SQL과 실전 데이터 문의

1

159

1

(맥환경) workbench 이용할 때 패스워드 입력 안해도 자동으로 활성화 가능해져요..

0

353

1

강의 커리큘럼 질문 있습니다.

0

176

1

강의 자료 이미지가 보이지 않습니다.

0

163

1

Join 구문에서 메인 테이블

0

179

1

예제문제 추가 쿼리 질문

0

204

2

강의 화면 출력이 되지 않는 현상

0

211

1

파이썬으로 다루는 MySQL

0

208

1

JOIN 활용 SQL 연습문제

0

179

1