mysql에 60k 행을 삽입하려고하는데 완료하는 데 10 분이 걸립니다.
for obj in parsed_objs:
key = 'randomstring'
mysqlc.execute("""
REPLACE INTO infos
(`key`, `value`)
VALUES
(%(key)s, %(value)s)
""", {'key':key, 'value':obj['val']})
mysqlc.connection.commit()
이 작업을 수행하는 좋은 방법입니까?
commit ()을 실행하면 스크립트가 분리 된 쿼리를 실행하거나 모두 병합합니까?
이와 같이 고유 한 문자열을 하나만 만드는 것이 좋은 생각일까요?
insert into table my_table(col1, col2) VALUES (val1_1, val2_1), (val1_2, val2_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()
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다