私はConnector/Pythonを使用して、多くの行をmysqlの一時テーブルに挿入しています。行はすべてリストのリストにあります。私は、パフォーマンスが非常に悪かった(より多くの行を持つ、もちろん)ことに気づいConnector/Python executemanyが挿入を最適化しないのはなぜですか?
cursor = connection.cursor();
batch = [[1, 'foo', 'bar'],[2, 'xyz', 'baz']]
cursor.executemany('INSERT INTO temp VALUES(?, ?, ?)', batch)
connection.commit()
:私はこのような挿入を行います。 SHOW PROCESSLISTを使って、各インサートが別々に実行されていたことに気付きました。しかし、文書https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.htmlは、これが1つの挿入に最適化されるべきだと言います。どうしたの?
https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html "このメソッドは、指定されたデータベース操作(クエリまたはコマンド)を実行します。 %sまたは%(name)のパラメータスタイル(つまり、formatまたはpyformatスタイルを使用)を使用して変数を指定するexecute()は、multiがTrueの場合はイテレータを返します。いいえ?プレースホルダをカーソルAPIに配置します。 – pvg
それでも、その声明は '?'で100%罰金を働かせます。他の開発者が既存のコードでそれを使用していたので、私はこれを使用しましたそれはちょっとしたことが奇妙です。 – blueimpb
API自体はさまざまなプレースホルダをサポートしています。おそらくどこかの一般的な機能がそれらをキャッチしていますか?どちらの方法でも、実際にプレースホルダーの実装自体を照会することができますhttps://www.python.org/dev/peps/pep-0249/#paramstyle mysqlコネクターの場合は、常に%sまたは名前付きparams。 – pvg