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


크롤링한 데이터를 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)가 어떻게 되나요?    허대영(Daeyoung Heo)   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 | | +--------+--------------+------+-----+---------+----------------+     Jinwithyoo   2016.10.6 01:39     
  • 제가 코드를 잘못 봤었군요. 첫번째 Select에서 (jpname, koname, enname)으로 선택하는데, 8,000개 자료 중에 중복되는 데이터가 하나도 없나요?    허대영(Daeyoung Heo)   2016.10.6 07:38     
조회수 84


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close