python에서 Mysql 데이터 삽입 질문 입니다.
조회수 3710회
크롤링한 데이터를 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 | |
+--------+--------------+------+-----+---------+----------------+
-
(•́ ✖ •̀)
알 수 없는 사용자
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개 정도 있다는 얘기이군요.-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력