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

좋은 웹페이지 즐겨찾기