2014-01-23 1 views
0

mysql을 행하지만 10 분 정도 소요을 삽입하는 가장 좋은 방법은이 작업을 수행 할 수있는 좋은 방법입니다합니까?파이썬 60K 내가 MySQL의에서 60K 행을 삽입하기 위해 노력하고있어

commit()을 실행하면 스크립트가 분리 된 쿼리를 실행하거나 모두 병합합니까?

어쩌면 좋은 생각이 이와 같은 고유 한 문자열을 작성해야합니까?

insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_2); 
+0

당신이 "LOAD 데이터 INFILE"로 봤어을? – user2370125

+0

예, 다른 방법을 사용해 보겠습니다. – user3175226

답변

2

가능하면 SQL에서 LOAD DATA INFILE ... 문을 사용하여 데이터를 대량로드하는 것이 좋습니다. 이렇게하면 각 데이터 행을로드하기 위해 엄청난 수의 별도 쿼리를 작성하지 않아도됩니다.

게시 한 코드에서로드하려는 데이터 행당 하나의 쿼리를 생성하게됩니다. commit()은 트랜잭션이 시작된 이후의 모든 쿼리를 포괄하는 트랜잭션 만 커밋합니다.

당신은 확실히 파이썬에서이 작업을 수행 할 경우, 당신은이 같은 executemany를 사용하여 시도 할 수 :

db = MySQLdb.connect(host="your_host", user="your_user", passwd="your_password", db="your_database") 
write_cursor = db.cursor() 
write_list = [] 
for obj in parsed_objs: 
    key = 'randomstring' 
    write_list.append((key,obj[key])) 

sql = "REPLACE INTO infos (`key`, `value`) VALUES (%s, %s)" 
write_cursor.executemany(sql, write_list) 
db.commit() 
+0

위대한 분! 이것은 10 초 이내에 50k 인서트를 만들었습니다. 감사! – user3175226

관련 문제