Quantcast
Channel: Node.jsタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9164

Nodejs の postgresql ドライバ (Sequelize, Prisma) を少し触ってみた。

$
0
0
@kenmaroです。 普段は主に秘密計算、準同型暗号などの記事について投稿しています。 秘密計算に関連するまとめの記事に関しては以下をご覧ください。 秘密計算エンジニアを始めて1年が経った。 秘密計算エンジニアを始めて2年半が経った。 概要 Nodejs のドライバを使ってpostgresqlに接続するテストを行った際に、 どのようなドライバやライブラリ、フレームワークがあるのかを調べたので簡単に備忘録的にまとめてみます。 初めにまとめ いくつかDBドライバ的なものは存在して、有名なものも幾つかありましたが、 この二つが中でも有名なようでした。 Sequelize DBへのORMをもったライブラリであり、簡単に接続したいのであればこれを使うのが良さそうです。 Prisma ライブラリというよりはフレームワーク的な感じでいろいろとフォルダ構成など必要になるようです。 ウェブアプリなどを構成する上でがっつりと開発するなら使ってみてもいいでしょう。 かなり人気が高まっているようです。 どちらも試してみたのですが、 私の場合目的がサクッと試すという目的だったため、Sequelize を最終的には主に使いました。 環境構築 postgresql はローカルに構築せず(してもいいですが、)、Docker を使ってサクッと開発環境を構築した方が簡単です。 docker-compose.yml version: "2" services: mysql: restart: always image: mysql:latest ports: ["3306:3306"] environment: MYSQL_DATABASE: 'test' MYSQL_ROOT_PASSWORD: 'password' MYSQL_USER: 'postgres' MYSQL_PASS: 'password' volumes: - /mnt/data/mysql:/var/lib/mysql pgdb: container_name: pg_db image: postgres:latest ports: ["5432:5432"] environment: - POSTGRES_PASSWORD=password" command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"] このように mysql やpostgresql を簡単に構築できるdocker-compose.yml を 作っておくととても便利ですね。 このymlと同階層で、 $docker-compose up -d pgdb で開発postgresqlを立ち上げましょう。 立ち上げたら、psqlというクライアントCLIライブラリを使って接続テストしてみます。 デフォルトでは postgres というユーザ と postgres というデータベース が構築されており、 パスワードはdocker-compose で指定しているものです。 よって、接続コマンドは psql -U postgres -h localhost -d postgres となります。 このあと、自分で開発用のユーザを作ったり、開発用のデータベースを作ってもいいですし、 めんどくさければとりあえずデフォルトのユーザpostgres、データベースpostgres を使ってもいいと思います。 psqlでいろいろDBをいじるコマンドは以前まとめたのでこの記事をご覧ください。 Sequelize 公式はこちらから 導入には以下を参考にさせていただきました。 コネクション確立のパラメターなどはこちらを参考に https://sequelize.org/master/class/lib/sequelize.js~Sequelize.html#instance-constructor-constructor 実際にコネクトしてみます。 フォルダ構成などは関係なく、index.jsだけで実質大丈夫なのでサクッと試せます。 mkdir nodetest cd nodetest npm init -y npm install --save sequelize npm install --save pg pg-hstore touch index.js index.js const { Sequelize, Model, DataTypes, QueryTypes } = require('sequelize'); //const sequelize = new Sequelize('sqlite::memory:'); const sequelize = new Sequelize('postgres', 'user', 'password', { host: 'localhost', port: 8088, dialect: 'postgres', pool: { max: 5, min: 0, acquire: 30000, idle: 10000 } }); class Test extends Model {} Test.init({ c1: DataTypes.STRING, }, { sequelize, modelName: 'test' }); (async () => { await sequelize.sync(); //const res = await Test.findAll(); //const res = await sequelize.query(`SELECT * FROM "test"`, { type: QueryTypes.SELECT }); const res = await sequelize.query('SELECT id FROM "test"', { type: QueryTypes.SELECT }); console.log("here done"); console.log(res); //const jane = await Test.create({ // username: 'janedoe', //}); //console.log(jane.toJSON()); })(); node index.js これでクエリ結果を受け取ることができるはずです。 Prisma Prisma についてはまだそこまで記事が多くないイメージでしたが、 私は上二つの記事をフォローして触ってみるのが一番しっくりきました。 しかしながら、ちょっとサクッと試すにはステップが多いかなあと思いました。。 まとめ 最近は個人的にはfirebase をひたすら使っており、久しぶりにnodejsのライブラリについて調べてみましたが、 なかなか面白かったです。 他の言語のドライバについても調べてみようかな、、 今回はこの辺で。 @kenmaro

Viewing all articles
Browse latest Browse all 9164

Trending Articles