Python3でMariadb(MySQL)の操作は、mysql-connectorとPyMySQLどちらがオススメ?

Mariadb(MySQL)の操作

Pythonを使用してMariadb(MySQL)を操作することは多々あると思います。
Mariadb(MySQL)のライブラリは複数ありどのライブラリを使用するか悩みます。

そこでよく目にするmysql-connectorとPyMySQLのベンチマークとり、
処理速度で選択する場合、どちらのライブラリが良いか確認していきます。

mysql-connectorのベンチマークサンプルコード(SELECT)

#!/usr/bin/env python3

 import mysql.connector
 import time

 db_host='localhost'
 db_name='test'
 db_user='root'
 db_pass='test'
 start = time.time()
 conn = mysql.connector.connect(
                             user=db_user,
                             password=db_pass,
                             host=db_host,
                             database=db_name)
 try:
     cur = conn.cursor()
     sql = "SELECT * FROM test"
     cur.execute(sql)
     result = cur.fetchall()
 finally:
     cur.close()
     conn.close()
 elapsed_time = time.time() - start
 print(elapsed_time)

PyMySQLのベンチマークサンプルコード(SELECT)

#!/usr/bin/env python3

 import pymysql.cursors
 import time

 db_host='localhost'
 db_name='test'
 db_user='root'
 db_pass='test'
 start = time.time()
 conn = pymysql.connect(
                     host=db_host,
                     db=db_name,
                     user=db_user,
                     password=db_pass,
                     charset='utf8mb4',
                     cursorclass=pymysql.cursors.DictCursor)
 try:
     cur = conn.cursor()
     sql = "SELECT * FROM test"
     cur.execute(sql)
     result = cur.fetchall()
 finally:
     cur.close()
     conn.close()
 elapsed_time = time.time() - start
 print(elapsed_time)

SELECTのベンチマーク

SELECTのベンチマークの条件として、テーブルはレコード数150万件です。
実行回数は少ないですが、5回で進めていきます。

ベンチマーク結果

mysql-connectorPyMySQL
53.0s70.0s
53.3s68.6s
54.1s68.4s
52.8s70.1s
53.2s68.5s

mysql-connectorのベンチマークサンプルコード(INSERT)

!/usr/bin/env python3

 import mysql.connector
 import time

 db_host='localhost'
 db_name='test_insert'
 db_user='root'
 db_pass='test'
 start = time.time()
 conn = mysql.connector.connect(
                             user=db_user,
                             password=db_pass,
                             host=db_host,
                             database=db_name)
 try:
     cur = conn.cursor()
     sql = "INSERT INTO test (test) VALUES (%s)"
     for v in range(1, 100000):
         cur.execute(sql, [v])
 finally:
     cur.close()
     conn.commit()
     conn.close()
 elapsed_time = time.time() - start
 print(elapsed_time)

PyMySQLのベンチマークサンプルコード(INSERT)

#!/usr/bin/env python3

 import pymysql.cursors
 import time

 db_host='localhost'
 db_name='test_insert'
 db_user='root'
 db_pass='test'
 start = time.time()
 conn = pymysql.connect(
                     host=db_host,
                     db=db_name,
                     user=db_user,
                     password=db_pass,
                     charset='utf8mb4',
                     cursorclass=pymysql.cursors.DictCursor)
 try:
     cur = conn.cursor()
     sql = "INSERT INTO test (test) VALUES (%s)"
     for v in range(1, 100000):
         cur.execute(sql, [v])
 finally:
     cur.close()
     conn.commit()
     conn.close()
 elapsed_time = time.time() - start
 print(elapsed_time)

INSERTのベンチマーク

INSERTのベンチマークの条件として、追加するレコード数10万件です。
実行回数は少ないですが、5回で進めていきます。

ベンチマーク結果

mysql-connectorPyMySQL
17.3s18.3s
18.3s18.2s
17.7s18.4s
17.3s18.4s
17.8s18.5s

結果

ベンチマークの結果 、mysql-connectorの方が処理速度が早いということがわかりました。
処理速度で選ぶならmysql-connectorが良いと思います。