PrismaでTiDBに接続する
TiDB は MySQL 互換のデータベースであり、 プリズマ Node.js 用の人気のあるオープンソース ORM フレームワークです。
このチュートリアルでは、TiDB と Prisma を使用して次のタスクを実行する方法を学習します。
- 環境を設定します。
- Prisma を使用して TiDB クラスターに接続します。
- アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作用のサンプルコードスニペット見つけることができます。
注記:
このチュートリアルは、 TiDB Cloud Serverless、 TiDB Cloud Dedicated、および TiDB Self-Managed で機能します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
TiDB クラスターがない場合は、次のように作成できます。
- (推奨) TiDB Cloud Serverless クラスターの作成に従って、独自のTiDB Cloudクラスターを作成します。
- ローカルテストTiDBクラスタをデプロイまたは本番のTiDBクラスタをデプロイに従ってローカル クラスターを作成します。
サンプルアプリを実行してTiDBに接続する
このセクションでは、サンプル アプリケーション コードを実行して TiDB に接続する方法を示します。
ステップ1: サンプルアプリのリポジトリをクローンする
サンプル コード リポジトリを複製するには、ターミナル ウィンドウで次のコマンドを実行します。
git clone https://github.com/tidb-samples/tidb-nodejs-prisma-quickstart.git
cd tidb-nodejs-prisma-quickstart
ステップ2: 依存関係をインストールする
次のコマンドを実行して、サンプル アプリに必要なパッケージ ( prisma
を含む) をインストールします。
npm install
既存のプロジェクトに依存関係をインストールする
既存のプロジェクトの場合は、次のコマンドを実行してパッケージをインストールします。
npm install prisma typescript ts-node @types/node --save-dev
ステップ3: 接続パラメータを指定する
選択した TiDB デプロイメント オプションに応じて、TiDB クラスターに接続します。
- TiDB Cloud Serverless
- TiDB Cloud Dedicated
- TiDB Self-Managed
クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックします。接続ダイアログが表示されます。
接続ダイアログの構成が動作環境と一致していることを確認します。
- 接続タイプは
Public
に設定されています。 - ブランチは
main
に設定されています。 - Connect With は
Prisma
に設定されています。 - オペレーティング システムは、アプリケーションを実行するオペレーティング システムと一致します。
- 接続タイプは
まだパスワードを設定していない場合は、「パスワードの生成」をクリックしてランダムなパスワードを生成します。
次のコマンドを実行して
.env.example
コピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、環境変数DATABASE_URL
次のように設定し、接続ダイアログ内の対応するプレースホルダー{}
接続文字列に置き換えます。DATABASE_URL='{connection_string}'注記
TiDB Cloud Serverless の場合、パブリック エンドポイントを使用するときは、
sslaccept=strict
設定して TLS 接続を有効にする必要があります。.env
ファイルを保存します。prisma/schema.prisma
で、接続プロバイダーとしてmysql
設定し、接続 URL としてenv("DATABASE_URL")
設定します。datasource db { provider = "mysql" url = env("DATABASE_URL") }
クラスターページに移動し、ターゲット クラスターの名前をクリックして概要ページに移動します。
右上隅の「接続」をクリックします。接続ダイアログが表示されます。
接続ダイアログで、 [接続タイプ]ドロップダウン リストから[パブリック]を選択し、 [CA 証明書]をクリックして CA 証明書をダウンロードします。
IP アクセス リストを設定していない場合は、 「IP アクセス リストの設定」をクリックするか、手順IPアクセスリストを構成するに従って最初の接続の前に設定してください。
パブリック接続タイプに加えて、TiDB Dedicated はプライベートエンドポイントとVPC ピアリング接続タイプもサポートしています。詳細については、 TiDB専用クラスタに接続する参照してください。
次のコマンドを実行して
.env.example
コピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、環境変数DATABASE_URL
次のように設定し、接続ダイアログで対応するプレースホルダー{}
接続パラメータに置き換えます。DATABASE_URL='mysql://{user}:{password}@{host}:4000/test?sslaccept=strict&sslcert={downloaded_ssl_ca_path}'注記
TiDB Cloud Serverless の場合、パブリックエンドポイントを使用する場合は、
sslaccept=strict
設定して TLS 接続を有効にすることをお勧めします。sslaccept=strict
設定して TLS 接続を有効にする場合は、sslcert=/path/to/ca.pem
を介して接続ダイアログからダウンロードした CA 証明書のファイル パスを指定する必要があります。.env
ファイルを保存します。prisma/schema.prisma
で、接続プロバイダーとしてmysql
設定し、接続 URL としてenv("DATABASE_URL")
設定します。datasource db { provider = "mysql" url = env("DATABASE_URL") }
次のコマンドを実行して
.env.example
コピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、環境変数DATABASE_URL
次のように設定し、対応するプレースホルダー{}
TiDB クラスターの接続パラメータに置き換えます。DATABASE_URL='mysql://{user}:{password}@{host}:4000/test'TiDB をローカルで実行している場合、デフォルトのホスト アドレスは
127.0.0.1
で、パスワードは空です。.env
ファイルを保存します。prisma/schema.prisma
で、接続プロバイダーとしてmysql
設定し、接続 URL としてenv("DATABASE_URL")
設定します。datasource db { provider = "mysql" url = env("DATABASE_URL") }
ステップ4. データベーススキーマを初期化する
次のコマンドを実行してプリズマ移行呼び出し、 prisma/prisma.schema
で定義されたデータ モデルを使用してデータベースを初期化します。
npx prisma migrate dev
prisma.schema
で定義されたデータ モデル:
// Define a Player model, which represents the `players` table.
model Player {
id Int @id @default(autoincrement())
name String @unique(map: "uk_player_on_name") @db.VarChar(50)
coins Decimal @default(0)
goods Int @default(0)
createdAt DateTime @default(now()) @map("created_at")
profile Profile?
@@map("players")
}
// Define a Profile model, which represents the `profiles` table.
model Profile {
playerId Int @id @map("player_id")
biography String @db.Text
// Define a 1:1 relation between the `Player` and `Profile` models with foreign key.
player Player @relation(fields: [playerId], references: [id], onDelete: Cascade, map: "fk_profile_on_player_id")
@@map("profiles")
}
Prisma でデータ モデルを定義する方法については、 データモデルドキュメントを確認してください。
予想される実行出力:
Your database is now in sync with your schema.
✔ Generated Prisma Client (5.1.1 | library) to ./node_modules/@prisma/client in 54ms
このコマンドは、 prisma/prisma.schema
に基づいて TiDB データベースにアクセスするためのプリズマクライアント生成します。
ステップ5: コードを実行する
サンプル コードを実行するには、次のコマンドを実行します。
npm start
サンプルコードの主なロジック:
// Step 1. Import the auto-generated `@prisma/client` package.
import {Player, PrismaClient} from '@prisma/client';
async function main(): Promise<void> {
// Step 2. Create a new `PrismaClient` instance.
const prisma = new PrismaClient();
try {
// Step 3. Perform some CRUD operations with Prisma Client ...
} finally {
// Step 4. Disconnect Prisma Client.
await prisma.$disconnect();
}
}
void main();
予想される実行出力:
接続が成功すると、ターミナルは次のように TiDB クラスターのバージョンを出力します。
🔌 Connected to TiDB cluster! (TiDB version: 8.0.11-TiDB-v8.1.1)
🆕 Created a new player with ID 1.
ℹ️ Got Player 1: Player { id: 1, coins: 100, goods: 100 }
🔢 Added 50 coins and 50 goods to player 1, now player 1 has 150 coins and 150 goods.
🚮 Player 1 has been deleted.
サンプルコードスニペット
次のサンプル コード スニペットを参照して、独自のアプリケーション開発を完了することができます。
完全なサンプル コードとその実行方法については、 tidb-samples/tidb-nodejs-prisma-クイックスタートリポジトリを参照してください。
データを挿入
次のクエリは、単一のPlayer
レコードを作成し、TiDB によって生成されたid
フィールドを含む作成されたPlayer
オブジェクトを返します。
const player: Player = await prisma.player.create({
data: {
name: 'Alice',
coins: 100,
goods: 200,
createdAt: new Date(),
}
});
詳細についてはデータを挿入を参照してください。
クエリデータ
次のクエリは、レコードが見つからない場合は ID 101
またはnull
を持つ単一のPlayer
オブジェクトを返します。
const player: Player | null = prisma.player.findUnique({
where: {
id: 101,
}
});
詳細についてはクエリデータを参照してください。
データの更新
次のクエリは、 ID 101
のPlayer
にコイン50
枚と商品50
を追加します。
await prisma.player.update({
where: {
id: 101,
},
data: {
coins: {
increment: 50,
},
goods: {
increment: 50,
},
}
});
詳細についてはデータの更新を参照してください。
データを削除する
次のクエリは、ID 101
のPlayer
削除します。
await prisma.player.delete({
where: {
id: 101,
}
});
詳細についてはデータを削除するを参照してください。
役に立つメモ
外部キー制約と Prisma リレーション モード
参照整合性確認するには、外部キー制約または Prisma リレーション モードを使用できます。
外部キーは、TiDB v6.6.0 からサポートされている実験的機能であり、関連データのテーブル間参照と、データの一貫性を維持するための外部キー制約を可能にします。
プリズマ関係モード 、Prisma クライアント側での参照整合性のエミュレーションです。ただし、参照整合性を維持するために追加のデータベース クエリが必要になるため、パフォーマンスに影響があることに注意してください。
次のステップ
- ORM フレームワーク Prisma ドライバーの使用方法をPrismaのドキュメントから詳しく学びます。
- 開発者ガイドのデータを挿入 、 データの更新 、 データを削除する 、 クエリデータ 、 取引 、 SQLパフォーマンスの最適化などの章で、 TiDB アプリケーション開発のベスト プラクティスを学習します。
- プロフェッショナルTiDB 開発者コースを通じて学び、試験に合格するとTiDB 認定獲得します。
ヘルプが必要ですか?
TiDB コミュニティ 、またはサポートチケットを作成するについて質問します。