MySQLdb、mysqlclient、MySQLコネクタ/ Pythonの違いは何ですか?


93

だから私はPythonでデータベースの更新をしようとしていて、開発環境全体をセットアップしているときに、これらの3つのことに遭遇してめまいがしました。

  1. MySQLdbがあります

  2. mysqlclientがあります

  3. そして、mysqlコネクタpythonがあります

それらのそれぞれは何ですか、違いとそれらを使用する場所は何ですか?ありがとう


1
ほとんどの言語には、さまざまなレベルの洗練度、サポート、品質のデータベースアダプタレイヤーがいくつかあります。
tadman 2017年

mysqlclientは、python3.3 +をサポートするMySQLdbのフォークバージョンであり、mysqlコネクタはmysqlの公式モジュールです。
warungman 2017年

3
pymysqlもあります
Cenk Alti

回答:


81

MySQLdbは、MySQLデータベースのAPIを実装するCモジュールの薄いPythonラッパーです。

しばらく前に使用されていたMySQLDb1バージョンのラッパーがありましたが、現在はレガシーと見なされています。MySQLDb1がバグ修正とPython3サポートを備えたMySQLDb2に進化し始めたとき、MySQLDb1はフォークされ、バグ修正とPython3サポートを備えたmysqlclientがどのように表示されたかを示します。要約すると、本番環境で使用する準備ができていないMySQLDb2、古いドライバーとしてのMySQLDb1、およびバグ修正とPython3サポートを備えたコミュニティサポートのmysqlclientがあります。

現在、その混乱を解決するために、MySQLは独自のバージョンのMySQLアダプターを提供しています-mysqlコネクターは、Cモジュールの依存関係がなく標準のPythonモジュールのみが使用されるMySQLAPIを使用するオールインPythonモジュールです。

だから今、問題は次のようになります:mysqlclientとmysqlコネクタ。

私に関しては、公式にサポートされているライブラリmysqlclientを使用しますが、同様に良い選択であるはずです。どちらも、過去数日間のアクティブなコミットで確認できる修正と新機能でアクティブに更新されています。

注:私はそれらについてあまり経験がなかったので、どちらかがあなたのニーズに合わない場合があるかもしれません。どちらのライブラリもPEP-249標準に準拠しているため、少なくとも基本的な機能はどこでも問題ありません。

インストールと依存関係

  • mysqlclient

Cラッパーのフォークとして、これらの拡張機能を構築するためにPythonヘッダーファイルを追加するMySQLと連携するCモジュールが必要です(python-devを読んでください)。インストールは使用するシステムによって異なります。パッケージ名を知っていて、それらをインストールできることを確認してください。


70

現在維持されているPython用のMySQLアダプターは次のとおりです。

  • mysqlclient-CPython用の最速のMySQLコネクタ。mysql-connector-cCライブラリが機能する必要があります。

  • PyMySQL-純粋なPythonMySQLクライアント。との両方のメンテナによるmysqlclientPyMySQL、次の場合に使用する必要がありますPyMySQL

    • libmysqlclientなんらかの理由でご利用いただけません。
    • geventまたはeventletのmonkeypatchedソケットを使用したい。
    • mysqlプロトコルをハックする必要はありません。
  • mysql-connector-python--OracleのMySQLグループによって開発されたMySQLコネクタ。これも完全にPythonで記述されています。パフォーマンスは3つのうちで最悪のようです。また、ライセンスの問題により、PyPIからダウンロードできません(ただし、condaから入手できるようになりました)。

ベンチマーク

次のベンチマークによると、mysqlclientは純粋なPythonクライアントよりも高速です(場合によっては10倍以上高速です)。


2
したがってPyMySQL、PyPyを使用する場合は、まだ道のりのようです。
radtek 2018年

mysqlclientのコンパイルで問題が発生した場合は、次の説明に従ってホイールパッケージを介してインストールできます:stackoverflow.com/a/31077052/2848256
–ИскренСтаниславов 2018

sqlalchemyはmysqlclientをサポートしていますか?
ヴィシャル

4
@vishal AFAIKmysqlclientは、データベースURLがmysql://...。で始まる場合にsqlalchemyによって使用されるデフォルトのコネクタです。を使用するにPyMySQLは、URLをmysql+pymysql://...。で始めます。を使用するにmysql-connector-pythonは、URLをmysql+mysqlconnector://...。で始めます。詳細については、sqlalchemyのドキュメントを参照してください。
ostrokach

12

ユーザーが提供する多くのオプション。パーティーに少し遅れた。しかし、私の2セントはpypy3.7バージョンのベンチマークに使用されています。

より高速なアクセスと繰り返しアクセスが必要な場合は、mysqlclientに固執してください

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.