저는 데이터베이스와 상호 작용하기 위해 Python의 MySQLdb 모듈을 사용하고 있습니다. 테이블에 행으로 삽입해야하는 매우 큰 목록 (수만 개의 요소)이있는 상황이 있습니다.
지금 내 해결책은 큰 INSERT
문을 문자열로 생성하고 실행하는 것입니다.
더 똑똑한 방법이 있습니까?
해결 방법
더 똑똑한 방법이 있습니다.
매뉴얼 페이지는 다음과 같이 설명합니다.
기본적으로 MySQL은 자동 커밋으로 실행됩니다. mode enabled. This means that as soon as you execute a statement that updates (modifies) a table, MySQL stores the update on disk to make it permanent. To disable autocommit mode, 다음 문장을 사용하십시오.
SET autocommit=0;
비활성화 후 autocommit mode by setting the autocommit variable to zero, changes to transaction-safe tables (such as those for InnoDB, BDB, or NDBCLUSTER) are not made permanent immediately. You must use COMMIT to store your changes to disk or ROLLBACK to ignore 변화들.
이것은 데이터베이스 무결성이 가장 중요하다고 가정하는 RDBM 시스템의 매우 일반적인 기능입니다. 대량 삽입은 1ms가 아닌 삽입 당 1 초 정도 걸립니다. 너무 큰 삽입 문을 만드는 대안은 SQL 구문 분석기가 오버로드 될 위험이있는이 단일 커밋을 달성하려고합니다.
참조 페이지 https://stackoverflow.com/questions/6482004
'파이썬' 카테고리의 다른 글
파이썬 문자열 대신 바이트로 작동하는 StringIO 대체? (0) | 2020.09.30 |
---|---|
파이썬 장고 SUM 쿼리? (0) | 2020.09.30 |
파이썬 항목 순서를 유지하면서 목록에서 무작위 샘플을 얻습니까? (0) | 2020.09.29 |
파이썬 Python TypeError : 필수 인수 'source'(pos 1)를 찾을 수 없습니다. (0) | 2020.09.29 |
파이썬 Python, 계산 목록 차이 (0) | 2020.09.29 |
댓글