prisma clientを使ってみた。CRUD編
prismaの基本的な使い方。Postgresql使ってます。
初期設定
prismaをインストール
npm install prisma --save-dev
npx prisma
prisma initで必要なファイル(.envとschema.prisma)を作ります
npx prisma init
.envを環境に合わせて編集
DATABASE_URL=postgresql://<USER>:@localhost:5432/<DATABASE>
prisma/schema.prismaを編集。prisma schema
model部分にテーブルの情報を書きます。Data model
datasource db {
url = env("DATABASE_URL")
provider = "postgresql"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
email String @unique
name String?
}
prisma client
@prisma/clientをインストール
npm install @prisma/client
prisma clientのコードを生成
generateコマンドでprisma clientのコードを作ってくれます (node_modules/@prisma/client/にファイルができる)
npx prisma generate
データベースのマイグレーション
データベースのテーブルを生成、変更するコマンド。
—nameの後は、コメントなので、schemaファイルを変更してマイグレーションする時はname部分も変更する
npx prisma migrate dev --name init
テーブルのスキーマを変更した時はgenerateしないと、typescriptのエラーが出る
npx prisma generate
他のプロジェクトでprismaを使う時は、db pullコマンドでschema.prismaをダウンロードできる (最低限のschema.prismaは必要なので、npx prisma initは実行しておく)
printオプションを付けると、内容確認できる
npx prisma db pull
# 先に表示チェック
prisma db pull --print
クエリー
@prisma/clientのインポートと、インスタンス生成は共通
user部分がテーブル名
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient()
// クエリー
const users = await prisma.user.findMany()
create
1行追加
const user = await prisma.user.create({
data: {
email: 'elsa@prisma.io',
name: 'Elsa Prisma',
},
})
複数行追加。dataの引数は配列
const createMany = await prisma.user.createMany({
data: [
{ name: 'Bob', email: 'bob@prisma.io' },
{ name: 'Bobo', email: 'bob@prisma.io' }, // Duplicate unique key!
{ name: 'Yewande', email: 'yewande@prisma.io' },
{ name: 'Angelique', email: 'angelique@prisma.io' },
],
skipDuplicates: true, // Skip 'Bobo'
})
read
IDで取得
const user = await prisma.user.findUnique({
where: {
id: 99,
},
})
全ユーザー取得
const users = await prisma.user.findMany()
whereで絞り込み。Filtering and sorting
const users = await prisma.user.findMany({
where: {
email: {
endsWith: "prisma.io"
}
},
}
update
1行更新
const updateUser = await prisma.user.update({
where: {
email: 'viola@prisma.io',
},
data: {
name: 'Viola the Magnificent',
},
})
複数行更新
const updateUsers = await prisma.user.updateMany({
where: {
email: {
contains: 'prisma.io',
},
},
data: {
role: 'ADMIN',
},
})
upsert
const upsertUser = await prisma.user.upsert({
where: {
email: 'viola@prisma.io',
},
update: {
name: 'Viola the Magnificent',
},
create: {
email: 'viola@prisma.io',
name: 'Viola the Magnificent',
},
})
delete
1行削除
const deleteUser = await prisma.user.delete({
where: {
email: 'bert@prisma.io',
},
})
複数行
const deleteUsers = await prisma.user.deleteMany({
where: {
email: {
contains: 'prisma.io',
},
},
})
基本的なことやってみたけど、簡単で直感的なので迷うことは少なそう。