Sequelize で TiDB に接続する

TiDB は MySQL 互換データベースであり、 続編は Node.js の人気のある ORM フレームワークです。

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

  • 環境をセットアップします。
  • Sequelize を使用して TiDB クラスターに接続します。
  • アプリケーションをビルドして実行します。オプションで、基本的な CRUD 操作のサンプルコードスニペットを見つけることができます。

注記

このチュートリアルは、TiDB サーバーレス、TiDB 専用、および TiDB セルフホストで動作します。

前提条件

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

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
  1. クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。

  2. 右上隅にある「接続」をクリックします。接続ダイアログが表示されます。

  3. 接続ダイアログの設定が動作環境と一致していることを確認してください。

    • エンドポイント タイプはPublicに設定されます

    • ブランチはmainに設定されています

    • [接続先]Generalに設定されています

    • オペレーティング システムが環境に一致します。

    注記

    Node.js アプリケーションでは、TLS (SSL) 接続を確立するときにデフォルトで組み込みのMozilla CA 証明書を使用するため、SSL CA 証明書を提供する必要はありません。

  4. 「パスワードの生成」をクリックして、ランダムなパスワードを作成します。

    ヒント

    以前にパスワードを生成したことがある場合は、元のパスワードを使用するか、 「パスワードのリセット」をクリックして新しいパスワードを生成できます。

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

    cp .env.example .env
  6. .envファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}接続パラメーターに置き換えます。

    TIDB_HOST='{host}' TIDB_PORT='4000' TIDB_USER='{user}' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' TIDB_ENABLE_SSL='true'
  7. .envファイルを保存します。

  1. クラスターページに移動し、ターゲット クラスターの名前をクリックして、その概要ページに移動します。

  2. 右上隅にある「接続」をクリックします。接続ダイアログが表示されます。

  3. 「どこからでもアクセスを許可」をクリックし、 「TiDB クラスター CA のダウンロード」をクリックして CA 証明書をダウンロードします。

    接続文字列の取得方法の詳細については、 TiDB専用標準接続を参照してください。

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

    cp .env.example .env
  5. .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}'
  6. .envファイルを保存します。

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

    cp .env.example .env
  2. .envファイルを編集し、次のように環境変数を設定し、接続ダイアログ上の対応するプレースホルダー{}接続パラメーターに置き換えます。

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

    TiDB をローカルで実行している場合、デフォルトのホスト アドレスは127.0.0.1で、パスワードは空です。

  3. .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 6Players700コインと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 6Playerレコードを削除します。

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());

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

次のステップ

助けが必要?

不和またはサポートチケットを作成するについて質問してください。

不和またはサポートチケットを作成するについて質問してください。

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

Playground
新規
登録なしで TiDB の機能をワンストップでインタラクティブに体験できます。
製品
TiDB Cloud
TiDB
価格
PoC お問い合わせ
エコシステム
TiKV
TiFlash
OSS Insight
© 2024 PingCAP. All Rights Reserved.
Privacy Policy.