크롤링 결과를 DB에 저장하는 단계에서 PRIMARY KEY로 인해 중복되는 상품이 누락되는 문제
342
작성한 질문수 4
크롤링한 데이터를 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. 좋은 강의 항상 감사합니다.
답변 1
1
안녕하세요. 강의에 첨부된 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





