pymysql에서execute와executemany 성능 비교

하나.성능 비교


오늘 갑자기pymysql에서exectue,executemany가 데이터베이스에 삽입하는 효율을 시험해 보려고 합니다. 차이가 크지 않습니다.pymysql에서execute와executemany 성능 비교
users 테이블 구조
CREATE TABLE `users` (                                                            
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `email` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

import pymysql

#  
SHOUFUYOU_USER_PROFILE_CONFIG = {
    'host': 'xxx.xxx.xxx.xxx',
    'port': xxxx,
    'user': 'xxxx',
    'password': 'xxxxxxx',
    'db': 'xxxxx',
    'charset': 'utf8',
}




def fn_timer(fn):
    """
      fn  
    :param fn:
    :return:
    """

    @wraps(fn)
    def function_timer(*args, **kwargs):
        start = now()
        result = fn(*args, **kwargs)
        logger.info(f'{fn.__name__} total running time {now() - start} seconds')
        return result

    return function_timer




@fn_timer
def test_execute(connection, sql):
    rows_count = 0
    with connection.cursor(pymysql.cursors.DictCursor) as cursor:
        for i in range(1000):
            rows_count += cursor.execute(sql, ('[email protected]', 'test' + str(i)))
        connection.commit()

    return rows_count


@fn_timer
def test_execute_many(connection, sql):
    with connection.cursor(pymysql.cursors.DictCursor) as cursor:
        datas = [('[email protected]', 'test' + str(i)) for i in range(1,1000)]
        rows_count = cursor.executemany(sql, datas)
        connection.commit()

    return rows_count


if __name__ == '__main__':
    insert_sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"
    connection = pymysql.connect(**SHOUFUYOU_USER_PROFILE_CONFIG)

    test_execute(connection, insert_sql)
    test_execute_many(connection, insert_sql)


Connected to pydev debugger (build 173.4127.16)
 test_execute total running time 33.28491401672363 seconds
test_execute_many total running time 0.12204098701477051 seconds


테스트 결과는 다음과 같습니다.
데이터 테스트 방법
시간을 소모하다
테스트 데이터량
실행 방법
3.287

executemany 방법
0.0930

실행 방법
33.284

executemany 방법
0.122

실행 방법
67.5612
2000
executemany 방법
0.19372
2000

2.총결산


데이터베이스에 대량으로 삽입해야 하는지, 아니면 excutemany 방법으로 이 방법과execute는 수량급이 아니라는 뚜렷한 차이를 알 수 있다.만약 비교적 적은 수량만 삽입한다면 exectue를 사용하는 것이 좋습니다.
즐거움을 나누고 감동을 붙잡아라.2018-08-13 08:58:30 –frank

좋은 웹페이지 즐겨찾기