📣
TiDB Cloud Premium はパブリックプレビュー中です。エンタープライズワークロード向けの無制限のスケーリング、即時の弾力性、高度なセキュリティを提供します。このページは自動翻訳されたものです。原文はこちらからご覧ください。

DjangoでTiDBに接続する



TiDBはMySQL互換のデータベースであり、Django強力なオブジェクトリレーショナルマッパー(ORM)ライブラリを含む、Python向けの人気の高いWebフレームワークです。

このチュートリアルでは、TiDBとDjangoを使用して以下のタスクを実行する方法を学ぶことができます。

  • 環境をセットアップしてください。
  • Djangoを使用してTiDBに接続します。
  • アプリケーションをビルドして実行します。必要に応じて、基本的なCRUD操作のサンプルコードスニペットも利用できます。

前提条件

このチュートリアルを完了するには、以下が必要です。

TiDBクラスタをお持ちでない場合は、以下の手順で作成できます。

TiDBに接続するには、サンプルアプリを実行してください。

このセクションでは、サンプルアプリケーションコードを実行してTiDBに接続する方法を説明します。

ステップ1:サンプルアプリのリポジトリをクローンする

サンプルコードリポジトリをクローンするには、ターミナルウィンドウで以下のコマンドを実行してください。

git clone https://github.com/tidb-samples/tidb-python-django-quickstart.git cd tidb-python-django-quickstart

ステップ2:依存関係をインストールする

サンプルアプリに必要なパッケージ(Django、django-tidb、mysqlclientなど)をインストールするには、以下のコマンドを実行してください。

pip install -r requirements.txt

mysqlclient でインストールの問題が発生した場合は、 mysqlclient の公式ドキュメントを参照してください。

django-tidbとは何ですか?

django-tidbは、TiDB と Django 間の互換性の問題を解決する Django 用の TiDB 方言です。

django-tidbをインストールするには、お使いの Django のバージョンに合ったバージョンを選択してください。例えば、 django==4.2.*を使用している場合は、 django-tidb==4.2.*をインストールしてください。マイナーバージョンは同じである必要はありませんが、最新のマイナーバージョンを使用することをお勧めします。

詳細については、 django-tidbリポジトリを参照してください。

ステップ3:接続情報の設定

選択したTiDBのデプロイオプションに応じて、TiDBに接続してください。

    1. My TiDBページに移動し、対象のTiDB Cloud StarterまたはEssentialインスタンスの名前をクリックして、概要ページに移動します。

    2. 右上隅のConnectをクリックしてください。接続ダイアログが表示されます。

    3. 接続ダイアログの設定がご使用のオペレーティング環境と一致していることを確認してください。

      • Connection TypePublicに設定されています。

      • Branchmainに設定されています。

      • Connect WithGeneralに設定されています。

      • お使いの環境に合ったOperating Systemを選択してください。

    4. Generate Passwordをクリックすると、ランダムなパスワードが生成されます。

    5. .env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。

      cp .env.example .env
    6. 対応する接続​​文字列.envファイルにコピー&ペーストしてください。例は以下のとおりです。

      TIDB_HOST='{host}' # e.g. gateway01.ap-northeast-1.prod.aws.tidbcloud.com TIDB_PORT='4000' TIDB_USER='{user}' # e.g. xxxxxx.root TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' CA_PATH='{ssl_ca}' # e.g. /etc/ssl/certs/ca-certificates.crt (Debian / Ubuntu / Arch)

      必ずプレースホルダー{}を、接続ダイアログから取得した接続パラメータに置き換えてください。

      TiDB Cloud Starter は安全な接続を必要とします。mysqlclient のssl_modeはデフォルトでPREFERREDになっているため、 CA_PATH手動で指定する必要はありません。空欄のままにしてください。ただし、 CA_PATH手動で指定する必要がある特別な理由がある場合は、 TiDB Cloud StarterへのTLS接続を参照して、さまざまなオペレーティングシステムの証明書パスを取得してください。

    7. .envファイルを保存します。

    1. My TiDBページに移動し、対象のTiDB Cloud Premiumインスタンスの名前をクリックして概要ページに移動します。

    2. 左側のナビゲーションペインで、 Settings > Networkingをクリックします。

    3. Networkingページで、Public EndpointEnableをクリックし、次にAdd IP Addressをクリックします。

      クライアントのIPアドレスがアクセスリストに追加されていることを確認してください。

    4. 左側のナビゲーションペインでOverviewをクリックすると、インスタンスの概要ページに戻ります。

    5. 右上隅のConnectをクリックしてください。接続ダイアログが表示されます。

    6. 接続ダイアログで、 Connection TypeドロップダウンリストからPublicを選択します。

      • 公開エンドポイントがまだ有効化中であることを示すメッセージが表示された場合は、処理が完了するまでお待ちください。
      • まだパスワードを設定していない場合は、ダイアログのSet Root Passwordをクリックしてください。
      • サーバー証明書を確認する必要がある場合、または接続に失敗して認証局(CA)証明書が必要な場合は、 CA certをクリックしてダウンロードしてください。
      • Public接続タイプに加えて、 TiDB Cloud Premium はPrivate Endpoint接続をサポートします。詳細については、 AWS PrivateLink経由でTiDB Cloud Premiumに接続しますを参照してください。
    7. .env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。

      cp .env.example .env
    8. 対応する接続​​文字列.envファイルにコピー&ペーストしてください。例は以下のとおりです。

      TIDB_HOST='{host}' # e.g. tidb.xxxx.clusters.tidb-cloud.com TIDB_PORT='4000' TIDB_USER='{user}' # e.g. root TIDB_PASSWORD='{password}' TIDB_DB_NAME='test'

      必ずプレースホルダー{}を、接続ダイアログから取得した接続パラメータに置き換えてください。

    9. .envファイルを保存します。

    1. My TiDBページに移動し、対象のTiDB Cloud Dedicatedクラスタの名前をクリックして概要ページに移動します。

    2. 右上隅のConnectをクリックしてください。接続ダイアログが表示されます。

    3. 接続ダイアログで、 Connection TypeドロップダウンリストからPublicを選択し、 CA certをクリックしてCA証明書をダウンロードします。

      IP アクセスリストを設定していない場合は、最初の接続の前に、 Configure IP Access Listをクリックするか、IP アクセスリストを設定するの手順に従って設定します。

      TiDB Cloud Dedicated は、Public接続タイプに加えて、Private EndpointおよびVPC Peering接続タイプもサポートしています。詳細については、 TiDB Cloud Dedicatedクラスタに接続しますを参照してください。

    4. .env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。

      cp .env.example .env
    5. 対応する接続​​文字列.envファイルにコピー&ペーストしてください。例は以下のとおりです。

      TIDB_HOST='{host}' # e.g. tidb.xxxx.clusters.tidb-cloud.com TIDB_PORT='4000' TIDB_USER='{user}' # e.g. root TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' CA_PATH='{your-downloaded-ca-path}'

      必ず、プレースホルダー{}を接続ダイアログから取得した接続パラメータに置き換え、 CA_PATH前の手順でダウンロードした証明書のパスに設定してください。

    6. .envファイルを保存します。

    1. .env.exampleをコピーして.envに名前を変更するには、次のコマンドを実行します。

      cp .env.example .env
    2. 対応する接続​​文字列.envファイルにコピー&ペーストしてください。例は以下のとおりです。

      TIDB_HOST='{tidb_server_host}' TIDB_PORT='4000' TIDB_USER='root' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test'

      プレースホルダー{}を接続パラメータに置き換え、 CA_PATHの行を削除してください。TiDB をローカルで実行している場合、デフォルトのホスト アドレスは127.0.0.1で、パスワードは空欄です。

    3. .envファイルを保存します。

    ステップ4:データベースを初期化する

    プロジェクトのルートディレクトリで、以下のコマンドを実行してデータベースを初期化します。

    python manage.py migrate

    ステップ5:サンプルアプリケーションを実行する

    1. アプリケーションを開発モードで実行します。

      python manage.py runserver

      アプリケーションはデフォルトでポート8000で実行されます。別のポートを使用するには、コマンドにポート番号を追加します。以下に例を示します。

      python manage.py runserver 8080
    2. アプリケーションにアクセスするには、ブラウザを開いてhttp://localhost:8000/にアクセスしてください。サンプルアプリケーションでは、以下の操作が可能です。

      • 新しいプレイヤーを作成します。
      • プレイヤーを一括作成します。
      • 全プレイヤーを表示します。
      • プレイヤーを更新します。
      • プレイヤーを削除します。
      • 2人のプレイヤー間で商品を取引します。

    サンプルコードスニペット

    以下のサンプルコードスニペットを参考に、独自のアプリケーション開発を完成させてください。

    完全なサンプルコードと実行方法については、 tidb-samples/tidb-python-django-quickstartリポジトリを参照してください。

    TiDBに接続する

    ファイルsample_project/settings.pyに、以下の設定を追加します。

    DATABASES = { "default": { "ENGINE": "django_tidb", "HOST": ${tidb_host}, "PORT": ${tidb_port}, "USER": ${tidb_user}, "PASSWORD": ${tidb_password}, "NAME": ${tidb_db_name}, "OPTIONS": { "charset": "utf8mb4", }, } } TIDB_CA_PATH = ${ca_path} if TIDB_CA_PATH: DATABASES["default"]["OPTIONS"]["ssl_mode"] = "VERIFY_IDENTITY" DATABASES["default"]["OPTIONS"]["ssl"] = { "ca": TIDB_CA_PATH, }

    ${tidb_host}${tidb_port}${tidb_user}${tidb_password}${tidb_db_name} 、および${ca_path} 、TiDBの実際の値に置き換える必要があります。

    データモデルを定義する

    from django.db import models class Player(models.Model): name = models.CharField(max_length=32, blank=False, null=False) coins = models.IntegerField(default=100) goods = models.IntegerField(default=1) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True)

    詳細については、 Djangoモデルを参照してください。

    データを挿入する

    # insert a single object player = Player.objects.create(name="player1", coins=100, goods=1) # bulk insert multiple objects Player.objects.bulk_create([ Player(name="player1", coins=100, goods=1), Player(name="player2", coins=200, goods=2), Player(name="player3", coins=300, goods=3), ])

    詳細については、データを挿入するを参照してください。

    クエリデータ

    # get a single object player = Player.objects.get(name="player1") # get multiple objects filtered_players = Player.objects.filter(name="player1") # get all objects all_players = Player.objects.all()

    詳細については、 クエリデータを参照してください。

    データの更新

    # update a single object player = Player.objects.get(name="player1") player.coins = 200 player.save() # update multiple objects Player.objects.filter(coins=100).update(coins=200)

    詳細については、データの更新を参照してください。

    データを削除する

    # delete a single object player = Player.objects.get(name="player1") player.delete() # delete multiple objects Player.objects.filter(coins=100).delete()

    詳細については、データを削除するを参照してください。

    次のステップ

    お困りですか?

    このページは役に立ちましたか?