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

Sequelizeを使用してTiDBに接続する



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

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

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

前提条件

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

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

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

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

ステップ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に接続してください。

    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}' TIDB_PORT='4000' TIDB_USER='{user}' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' TIDB_ENABLE_SSL='true'
    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}' TIDB_PORT='4000' TIDB_USER='{user}' TIDB_PASSWORD='{password}' TIDB_DB_NAME='test' TIDB_ENABLE_SSL='false'
    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}' 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());

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

    クエリデータ

    次のクエリはPlayersより大きいコインの単一の300レコードを返します。

    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 700を持つ700 Playersコインと6商品をデータを挿入するセクション:

    logger.info('Updating the new player...'); await newPlayer.update({ coins: 700, goods: 700 }); logger.info('Updated the new player.'); logger.info(newPlayer.toJSON());

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

    データを削除する

    次のクエリは、データを挿入データを挿入するで作成された ID { Player6レコードを削除します。

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

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

    次のステップ

    お困りですか?

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