だから私はpythonを使ってデータベースの更新を行おうとしており、開発環境全体をセットアップしているときに、これら3つのことに出会い、めまいがした。
MySQLdb があります
mysqlclient があります
それらのそれぞれは何ですか、違いとそれらをどこで使用しますか?ありがとう
MySQLdb は、MySQLデータベースのAPIを実装するCモジュールの薄いpythonラッパーです。
しばらく前に MySQLDb1 バージョンのラッパーが使用されていましたが、現在はレガシーと見なされています。 MySQLDb1がバグ修正とPython3サポートにより MySQLDb2 に進化し始めると、MySQLDb1が分岐し、バグ修正とPython3サポートにより mysqlclient がどのように出現したかがわかります。まとめると、現在、実稼働で使用する準備が整っていないMySQLDb2、古いドライバーとしてのMySQLDb1、およびバグ修正とPython3サポートを備えたmysqlclientをサポートするコミュニティーがあります。
今、その混乱を解決するために、MySQLは独自のバージョンのMySQLアダプターを提供します- mysql connector 、no CモジュールでMySQL APIを使用するオールインpythonモジュール依存関係および標準pythonモジュールのみが使用されます。
したがって、質問は次のようになります:mysqlclient vs mysql connector。
私に関しては、公式にサポートされているライブラリを使用しますが、mysqlclient
も適切な選択です。両方とも、直近のアクティブなコミットで確認できる修正および新機能で積極的に更新されています。
注:あまり経験がなかったため、ニーズに合っていない場合があります。両方のライブラリは PEP-249 標準に準拠しているため、少なくとも基本機能はどこでも使用できます。
インストールと依存関係
Cラッパーのフォークとして、MySQLで動作するCモジュールが必要です。MySQLはpythonヘッダーファイルを追加してこれらの拡張機能を作成します(python-devを参照)。インストールは使用するシステムによって異なります。パッケージ名を認識してインストールできることを確認してください。
現在維持されているPython用のMySQLアダプターが3つあります。
mysqlclient
-CPython用の群を抜いて最速のMySQLコネクタ。動作するにはmysql-connector-c
Cライブラリが必要です。
PyMySQL
-Pure Python MySQLクライアント。 mysqlclient
とPyMySQL
の両方のメンテナーによると、次の場合はPyMySQL
を使用する必要があります。
libmysqlclient
を使用できません。mysql-connector-python
-OracleのMySQLグループによって開発されたMySQLコネクタで、完全にPythonで記述されています。そのパフォーマンスは3つの中で最悪のようです。また、ライセンスの問題により、PyPIからダウンロードすることはできません(ただし、condaを介して利用可能になりました)。
以下のベンチマークによると、mysqlclient
は、純粋なPythonクライアントよりも高速です(10倍以上高速になる場合があります)。
ユーザーが提供する多くのオプション。パーティーに少し遅れました。しかし、私の2セント pypy 3.7バージョンのベンチマークで。
MySQL Connector/Python: 23.096168518066406 [sec]
mysqlclient: 6.815327882766724 [sec]
PyMySQL: 24.616853952407837 [sec]
MySQL Connector/Python: 22.619106769561768 [sec]
mysqlclient: 6.607790231704712 [sec]
PyMySQL: 24.410773038864136 [sec]
ループ...前のベンチマークから...
def q100k(cur):
t = time.time()
for _ in range(100000):
cur.execute("SELECT 1,2,3,4,5,6")
res = cur.fetchall()
assert len(res) == 1
assert res[0] == (1, 2, 3, 4, 5, 6)
return time.time() - t