## モジュール 3: プリペアドステートメントとバッチ挿入の使用

これで、Pythonコードを使用して TiDB Cloud Starter クラスタにデータを読み書きできるようになりました。しかし、アプリケーションのパフォーマンスを向上させたい場合は、プリペアドステートメント（事前コンパイルされた繰り返し実行用）と効率的なバッチ挿入（単一のSQL文でテーブルに複数行のデータを挿入するため）を使用することができます。

### 手順 1. プリペアドステートメントの使用

+ VS Codeの左側の**EXPLORER**で、`mysql_connector_python_demo`フォルダの下にある`prepared_statement.py`ファイルをクリックし、サンプルコードの`connection.cursor(prepared=True)`と`print("Generated PK is", cursor.lastrowid)`の行に注目してください。パラメータ`prepared=False`でカーソルを作成すると、クライアント側のプリペアドステートメントのみを使用することになります。`cursor.lastrowid`は、最近挿入された行の自動ランダムIDを取得するためのものです。

+ `prepared_statement.py` を実行します。

  ```bash
  poetry run python mysql_connector_python_demo/prepared_statement.py
  ```

  ```output
  The generated PK is 4035225266123964417
  ```

![90%](https://public-pingcap-innovation.s3.us-west-2.amazonaws.com/demo-405/405-prepared-statement-0307.jpg)

### 手順 2. バッチ挿入の使用

+ 次に、バッチ挿入と単一挿入のパフォーマンスを比較します。VS Codeの左側の**EXPLORER**で、`mysql_connector_python_demo`フォルダの下にある`batch_insert.py`ファイルをクリックしてください。

+ このステップでは、テーブル`t1_batchtest`に1000行を挿入します。バッチ挿入関数`_batch_style_insert`では、`executemany`関数を使用してデータを挿入します。一方、単一挿入関数`_single_style_insert`では、`execute`関数を使用して行ごとにデータを挿入します。

  ```bash
  poetry run python mysql_connector_python_demo/batch_insert.py
  ```

  ```output
  Batch Inserting 1000 rows in 84.9921875 (ms).
  Total rows in t1_batchtest table: 1000.
  Non-Batch Inserting 1000 rows in 19608.541259765625 (ms).
  Total rows in t1_batchtest table: 1000.
  ```

![90%](https://public-pingcap-innovation.s3.us-west-2.amazonaws.com/demo-405/405-batch-insert-0307.jpg)

+ ご覧のとおり、バッチ挿入は単一挿入よりもはるかに高速です。
