Python에서 효율적인 MySQL 사전 목록 삽입을 위해 Executemany를 활용
데이터 스크래핑에는 테이블에서 정보를 추출하여 데이터베이스에 저장하는 작업이 포함되는 경우가 많습니다. 기존 접근 방식은 작동하지만 비효율적일 수 있으며 최적화하지 않으면 잠재적으로 데이터베이스가 충돌할 수 있습니다.
사전 목록의 데이터를 MySQL 데이터베이스에 삽입하려고 시도하는 다음 코드를 고려해 보세요.
itemBank = [] for row in rows: itemBank.append((tempRow2, tempRow1, tempRow3, tempRow4)) # itemBank contains dictionaries representing data from each table row for item in itemBank: tempDict1 = item[0] tempDict2 = item[1] tempDict3 = item[2] tempDict4 = item[3] q = """ INSERT IGNORE INTO TABLE1 ( Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) VALUES ( "{0}", "{1}", "{2}", "{3}", "{4}" ) """.format(tempDict1['Item_Name'], tempDict2['Item_Price'], tempDict3['Item_In_Stock'], tempDict4['Item_Max'], getTimeExtra) try: x.execute(q) conn.commit() except: conn.rollback()
여기서 문제는 itemBank의 각 사전에 대한 개별 쿼리를 수동으로 구성하고 실행하는 데 있습니다. 이 접근 방식은 번거롭고 오류가 발생하기 쉽습니다.
executemany 활용
이러한 비효율성을 해결하는 방법은 동일한 쿼리를 여러 번 실행할 수 있는executemany 메서드를 활용하는 것입니다.
itemBank = [] for row in rows: itemBank.append(( tempRow2['Item_Name'], tempRow1['Item_Price'], tempRow3['Item_In_Stock'], tempRow4['Item_Max'], getTimeExtra )) #append data q = """ insert ignore into TABLE1 ( Item_Name, Item_Price, Item_In_Stock, Item_Max, Observation_Date ) values (%s,%s,%s,%s,%s) """ try: x.executemany(q, itemBank) conn.commit() except: conn.rollback()
이 수정된 코드에서는 행을 반복하여 사전에서 값을 추출하고 Executemany에 전달할 튜플 목록을 생성합니다. 쿼리 자체는 동일하게 유지되지만 이제 값에 자리 표시자 %s을(를) 사용합니다.
executemany를 사용하면 모든 데이터를 한 번에 전송하고 데이터베이스 상호 작용 횟수를 줄이고 위험을 최소화하므로 효율성이 크게 향상됩니다. 교착상태.
위 내용은 Executionmany는 Python에서 사전 목록의 MySQL 삽입을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!