python에서 Mysql 데이터 삽입 질문 입니다.

조회수 3695회

크롤링한 데이터를 mysql 테이블에 집어 넣으려고 합니다. 제 코드는

    def process_item(self, item, spider):
        self.cursor.execute("SELECT * FROM dmmactress_jpconvert WHERE jpname = %s AND koname = %s AND enname = %s", (item['jpname'], item['koname'], item['enname']))
        result = self.cursor.fetchone()


        if result:
            print("data already exist")
        else:
            try:
                self.cursor.execute("INSERT INTO dmmactress_jpconvert(jpname, koname, enname) VALUES (%s, %s, %s)", (item['jpname'], item['koname'], item['enname']))
                self.conn.commit()
            except MySQLdb.Error as e:
                print ("Error %d: %s" % (e.args[0], e.args[1]))
                return item

입니다.

문제는 데이터가 없는 빈 테이블에 id가 8000번까지 들어가야 하는데 위 코드를 실행하면 data already exist가 프린트 되면서 20%정도만 데이터에 저장 됩니다. 아무리봐도 코드에는 문제가 없는 것 같은데.. 어떤 경우에 저같은 문제가 발생되는지 궁금합니다.


+--------+--------------+------+-----+---------+----------------+
| Field  | Type         | Null | Key | Default | Extra          |
+--------+--------------+------+-----+---------+----------------+
| id     | int(11)      | NO   | PRI | NULL    | auto_increment |
| jpname | varchar(100) | NO   |     | NULL    |                |
| koname | varchar(100) | NO   |     | NULL    |                |
| enname | varchar(100) | NO   |     | NULL    |                |
+--------+--------------+------+-----+---------+----------------+
  • (•́ ✖ •̀)
    알 수 없는 사용자
  • `Data already exist` 에러가 나는 경우라면, Primary Key가 중복되는 경우 인 것 같은데, 테이블 구조(show create table dmmactress_jpconvert)가 어떻게 되나요? 허대영(소프트웨어융합대학) 2016.10.5 09:00
  • +--------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | jpname | varchar(100) | NO | | NULL | | | koname | varchar(100) | NO | | NULL | | | enname | varchar(100) | NO | | NULL | | +--------+--------------+------+-----+---------+----------------+ 알 수 없는 사용자 2016.10.6 01:39
  • 제가 코드를 잘못 봤었군요. 첫번째 Select에서 (jpname, koname, enname)으로 선택하는데, 8,000개 자료 중에 중복되는 데이터가 하나도 없나요? 허대영(소프트웨어융합대학) 2016.10.6 07:38

1 답변

  • 크롤링한 데이터에 중복되는 값이 있는 것 같습니다.

    self.cursor.execute("SELECT * FROM dmmactress_jpconvert WHERE jpname = %s AND koname = %s AND enname = %s", (item['jpname'], item['koname'], item['enname']))
    result = self.cursor.fetchone()
    

    을 보면 DB에 'jpname', 'koname', 'enname' 값이 있는지 fetchone을 통해 확인하고, 값이 이미 DB에 있으면 "data already exist"라는 문구를 보여주고, 아니면 DB에 해당 데이터를 넣는 것 처럼 보이는데요.

    빈 테이블에 id가 8000번까지 들어가야하는데, 실제로는 2000까지만 들어간다라고 함은 8000개의 데이터 중에 jpname, koname, enname이 중복되는 데이터가 6000개 정도 있다는 얘기이군요.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)