だから私はPythonでデータベースの更新をしようとしていて、開発環境全体をセットアップしているときに、これらの3つのことに遭遇してめまいがしました。
- そして、mysqlコネクタpythonがあります
それらのそれぞれは何ですか、違いとそれらを使用する場所は何ですか?ありがとう
だから私はPythonでデータベースの更新をしようとしていて、開発環境全体をセットアップしているときに、これらの3つのことに遭遇してめまいがしました。
それらのそれぞれは何ですか、違いとそれらを使用する場所は何ですか?ありがとう
回答:
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標準に準拠しているため、少なくとも基本的な機能はどこでも問題ありません。
インストールと依存関係
Cラッパーのフォークとして、これらの拡張機能を構築するためにPythonヘッダーファイルを追加するMySQLと連携するCモジュールが必要です(python-devを読んでください)。インストールは使用するシステムによって異なります。パッケージ名を知っていて、それらをインストールできることを確認してください。
現在維持されているPython用のMySQLアダプターは次のとおりです。
mysqlclient
-CPython用の最速のMySQLコネクタ。mysql-connector-c
Cライブラリが機能する必要があります。
PyMySQL
-純粋なPythonMySQLクライアント。との両方のメンテナによるmysqlclient
とPyMySQL
、次の場合に使用する必要がありますPyMySQL
。
libmysqlclient
なんらかの理由でご利用いただけません。mysql-connector-python
--OracleのMySQLグループによって開発されたMySQLコネクタ。これも完全にPythonで記述されています。パフォーマンスは3つのうちで最悪のようです。また、ライセンスの問題により、PyPIからダウンロードできません(ただし、condaから入手できるようになりました)。
次のベンチマークによると、mysqlclient
は純粋なPythonクライアントよりも高速です(場合によっては10倍以上高速です)。
PyMySQL
、PyPyを使用する場合は、まだ道のりのようです。
mysqlclient
は、データベースURLがmysql://...
。で始まる場合にsqlalchemyによって使用されるデフォルトのコネクタです。を使用するにPyMySQL
は、URLをmysql+pymysql://...
。で始めます。を使用するにmysql-connector-python
は、URLをmysql+mysqlconnector://...
。で始めます。詳細については、sqlalchemyのドキュメントを参照してください。
ユーザーが提供する多くのオプション。パーティーに少し遅れた。しかし、私の2セントはpypy3.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