Sequelize で TiDB に接続する
TiDB は MySQL 互換データベースであり、 続編は Node.js の人気のある ORM フレームワークです。
このチュートリアルでは、TiDB と Sequelize を使用して次のタスクを実行する方法を学習できます。
- 環境をセットアップします。
- Sequelize を使用して TiDB クラスターに接続します。
- アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作のサンプルコードスニペットを見つけることができます。
注記
このチュートリアルは、TiDB サーバーレス、TiDB 専用、および TiDB セルフホストで動作します。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- Node.js 18以降。
- ギット 。
- TiDB クラスター。
TiDB クラスターがない場合は、次のように作成できます。
- (推奨) TiDB サーバーレスクラスターの作成に従って、独自のTiDB Cloudクラスターを作成します。
- ローカル テスト TiDB クラスターをデプロイまたは本番TiDB クラスターをデプロイに従ってローカル クラスターを作成します。
TiDB クラスターがない場合は、次のように作成できます。
- (推奨) TiDB サーバーレスクラスターの作成に従って、独自のTiDB Cloudクラスターを作成します。
- ローカル テスト TiDB クラスターをデプロイまたは本番TiDB クラスターをデプロイに従ってローカル クラスターを作成します。
サンプル アプリを実行して TiDB に接続する
このセクションでは、サンプル アプリケーション コードを実行して TiDB に接続する方法を説明します。
注記
完全なコード スニペットと実行手順については、 tidb-samples/tidb-nodejs-sequelize-quickstart GitHub リポジトリを参照してください。
ステップ 1: サンプル アプリ リポジトリのクローンを作成する
ターミナル ウィンドウで次のコマンドを実行して、サンプル コード リポジトリのクローンを作成します。
git clone git@github.com:tidb-samples/tidb-nodejs-sequelize-quickstart.git
cd tidb-nodejs-sequelize-quickstart
ステップ 2: 依存関係をインストールする
次のコマンドを実行して、サンプル アプリに必要なパッケージ ( sequelize
を含む) をインストールします。
npm install
ステップ 3: 接続情報を構成する
選択した TiDB デプロイメント オプションに応じて、TiDB クラスターに接続します。
- TiDB Serverless
- TiDB Dedicated
- TiDB Self-Hosted
クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。
右上隅にある「接続」をクリックします。接続ダイアログが表示されます。
接続ダイアログの設定が動作環境と一致していることを確認してください。
エンドポイント タイプは
Public
に設定されますブランチは
main
に設定されています[接続先] は
General
に設定されていますオペレーティング システムが環境に一致します。
注記
Node.js アプリケーションでは、TLS (SSL) 接続を確立するときにデフォルトで組み込みのMozilla CA 証明書を使用するため、SSL CA 証明書を提供する必要はありません。
「パスワードの生成」をクリックして、ランダムなパスワードを作成します。
ヒント
以前にパスワードを生成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成できます。
次のコマンドを実行して
.env.example
をコピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}
接続パラメーターに置き換えます。TIDB_HOST='{host}' TIDB_PORT='4000' TIDB_USER='{user}' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' TIDB_ENABLE_SSL='true'.env
ファイルを保存します。
クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。
右上隅にある「接続」をクリックします。接続ダイアログが表示されます。
「どこからでもアクセスを許可」をクリックし、 「TiDB クラスター CA のダウンロード」をクリックして CA 証明書をダウンロードします。
接続文字列の取得方法の詳細については、 TiDB専用標準接続を参照してください。
次のコマンドを実行して
.env.example
をコピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}
接続パラメーターに置き換えます。TIDB_HOST='{host}' TIDB_PORT='4000' TIDB_USER='{user}' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' TIDB_ENABLE_SSL='true' TIDB_CA_PATH='{path/to/ca}'.env
ファイルを保存します。
次のコマンドを実行して
.env.example
をコピーし、名前を.env
に変更します。cp .env.example .env.env
ファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}
接続パラメーターに置き換えます。TIDB_HOST='{host}' TIDB_PORT='4000' TIDB_USER='root' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test'TiDB をローカルで実行している場合、デフォルトのホスト アドレスは
127.0.0.1
で、パスワードは空です。.env
ファイルを保存します。
ステップ 4: サンプル アプリを実行する
次のコマンドを実行してサンプル コードを実行します。
npm start
**期待される出力(部分):**
INFO (app/10117): Getting sequelize instance...
Executing (default): SELECT 1+1 AS result
Executing (default): DROP TABLE IF EXISTS `players`;
Executing (default): CREATE TABLE IF NOT EXISTS `players` (`id` INTEGER NOT NULL auto_increment COMMENT 'The unique ID of the player.', `coins` INTEGER NOT NULL COMMENT 'The number of coins that the player had.', `goods` INTEGER NOT NULL COMMENT 'The number of goods that the player had.', `createdAt` DATETIME NOT NULL, `updatedAt` DATETIME NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB;
Executing (default): SHOW INDEX FROM `players`
Executing (default): INSERT INTO `players` (`id`,`coins`,`goods`,`createdAt`,`updatedAt`) VALUES (1,100,100,'2023-08-31 09:10:11','2023-08-31 09:10:11'),(2,200,200,'2023-08-31 09:10:11','2023-08-31 09:10:11'),(3,300,300,'2023-08-31 09:10:11','2023-08-31 09:10:11'),(4,400,400,'2023-08-31 09:10:11','2023-08-31 09:10:11'),(5,500,500,'2023-08-31 09:10:11','2023-08-31 09:10:11');
Executing (default): SELECT `id`, `coins`, `goods`, `createdAt`, `updatedAt` FROM `players` AS `players` WHERE `players`.`coins` > 300;
Executing (default): UPDATE `players` SET `coins`=?,`goods`=?,`updatedAt`=? WHERE `id` = ?
Executing (default): DELETE FROM `players` WHERE `id` = 6
サンプルコードスニペット
次のサンプル コード スニペットを参照して、独自のアプリケーション開発を完了できます。
完全なサンプル コードとその実行方法については、 tidb-samples/tidb-nodejs-sequelize-quickstartリポジトリを確認してください。
TiDB に接続する
次のコードは、環境変数で定義されたオプションを使用して TiDB への接続を確立します。
// src/lib/tidb.ts
import { Sequelize } from 'sequelize';
export function initSequelize() {
return new Sequelize({
dialect: 'mysql',
host: process.env.TIDB_HOST || 'localhost', // TiDB host, for example: {gateway-region}.aws.tidbcloud.com
port: Number(process.env.TIDB_PORT) || 4000, // TiDB port, default: 4000
username: process.env.TIDB_USER || 'root', // TiDB user, for example: {prefix}.root
password: process.env.TIDB_PASSWORD || 'root', // TiDB password
database: process.env.TIDB_DB_NAME || 'test', // TiDB database name, default: test
dialectOptions: {
ssl:
process.env?.TIDB_ENABLE_SSL === 'true' // (Optional) Enable SSL
? {
minVersion: 'TLSv1.2',
rejectUnauthorized: true,
ca: process.env.TIDB_CA_PATH // (Optional) Path to the custom CA certificate
? readFileSync(process.env.TIDB_CA_PATH)
: undefined,
}
: null,
},
}
export async function getSequelize() {
if (!sequelize) {
sequelize = initSequelize();
try {
await sequelize.authenticate();
logger.info('Connection has been established successfully.');
} catch (error) {
logger.error('Unable to connect to the database:');
logger.error(error);
throw error;
}
}
return sequelize;
}
データの挿入
次のクエリは、単一のPlayers
レコードを作成し、 Players
オブジェクトを返します。
logger.info('Creating a new player...');
const newPlayer = await playersModel.create({
id: 6,
coins: 600,
goods: 600,
});
logger.info('Created a new player.');
logger.info(newPlayer.toJSON());
詳細については、 データの挿入を参照してください。
クエリデータ
次のクエリは、コインが300
より大きい単一のPlayers
レコードを返します。
logger.info('Reading all players with coins > 300...');
const allPlayersWithCoinsGreaterThan300 = await playersModel.findAll({
where: {
coins: {
[Op.gt]: 300,
},
},
});
logger.info('Read all players with coins > 300.');
logger.info(allPlayersWithCoinsGreaterThan300.map((p) => p.toJSON()));
詳細については、 クエリデータを参照してください。
データを更新する
次のクエリは、 データの挿入セクションで作成した ID 6
のPlayers
に700
コインと700
グッズを設定します。
logger.info('Updating the new player...');
await newPlayer.update({ coins: 700, goods: 700 });
logger.info('Updated the new player.');
logger.info(newPlayer.toJSON());
詳細については、 データを更新するを参照してください。
データの削除
次のクエリは、 データの挿入セクションで作成された ID 6
のPlayer
レコードを削除します。
logger.info('Deleting the new player...');
await newPlayer.destroy();
const deletedNewPlayer = await playersModel.findByPk(6);
logger.info('Deleted the new player.');
logger.info(deletedNewPlayer?.toJSON());
詳細については、 データの削除を参照してください。
次のステップ
- ORM フレームワーク Sequelize ドライバーの使用法をSequelize のドキュメントから詳しく学びます。
- TiDB アプリケーション開発のSQLパフォーマンスの最適化プラクティスについて取引 、 開発者ガイドの章 ( データの挿入など) データを更新する参照データの削除 単一テーブルの読み取りください。
- プロフェッショナルとしてTiDB 開発者コースを学び、試験合格後にTiDB 認定獲得します。
助けが必要?
不和またはサポートチケットを作成するについて質問してください。
不和またはサポートチケットを作成するについて質問してください。