データベースのクエリ
Prisma Client で最初のクエリを書く
Prisma Client を生成したので、クエリを書いてデータベース内のデータの読み書きを開始できます。
REST API を構築している場合、ルートハンドラーで Prisma Client を使用して、受信 HTTP リクエストに基づいてデータベース内のデータを読み書きできます。GraphQL API を構築している場合、リゾルバーで Prisma Client を使用して、受信クエリとミューテーションに基づいてデータベース内のデータを読み書きできます。
ただし、このガイドの目的では、Prisma Client を使用してデータベースにクエリを送信する方法を学ぶために、プレーンな Node.js スクリプトを作成するだけです。API の仕組みを理解したら、実際のアプリケーションコード (REST ルートハンドラーや GraphQL リゾルバーなど) に統合を開始できます。
index.ts
という名前の新しいファイルを作成し、次のコードを追加します
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
// ... you will write your Prisma Client queries here
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
コードスニペットのさまざまな部分の簡単な概要を以下に示します
@prisma/client
node モジュールからPrismaClient
コンストラクターをインポートするPrismaClient
をインスタンス化する- データベースにクエリを送信する
main
という名前のasync
関数を定義する main
関数を呼び出す- スクリプトが終了したらデータベース接続を閉じる
モデルがどのように見えるかによって、Prisma Client API も異なって見えます。たとえば、User
モデルがある場合、PrismaClient
インスタンスは、user
という名前のプロパティを公開し、そのプロパティで CRUD メソッド (findMany
、create
、update
など) を呼び出すことができます。プロパティはモデルにちなんで名付けられていますが、最初の文字は小文字です (したがって、Post
モデルの場合は post
、Profile
の場合は profile
と呼ばれます)。
次の例はすべて、Prisma スキーマのモデルに基づいています。
main
関数内で、次のクエリを追加して、データベースからすべての User
レコードを読み取り、結果を出力します
async function main() {
const allUsers = await prisma.user.findMany()
console.log(allUsers)
}
現在の TypeScript セットアップでコードを実行します。tsx
を使用している場合は、次のように実行できます
npx tsx index.ts
データベースイントロスペクションステップのスキーマを使用してデータベースを作成した場合、データベースに User
レコードがまだないため、クエリは空の配列を出力する必要があります。
[]
レコードを含む既存のデータベースをイントロスペクトした場合、クエリは JavaScript オブジェクトの配列を返す必要があります。
データベースにデータを書き込む
前のセクションで使用した findMany
クエリは、データベースからデータを読み取るだけです。このセクションでは、クエリを書いて Post
および User
テーブルに新しいレコードを書き込む方法を学びます。
main
関数を調整して、create
クエリをデータベースに送信します
async function main() {
await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Hello World' },
},
profile: {
create: { bio: 'I like turtles' },
},
},
})
const allUsers = await prisma.user.findMany({
include: {
posts: true,
profile: true,
},
})
console.dir(allUsers, { depth: null })
}
このコードは、ネストされた書き込みクエリを使用して、新しい Post
および Profile
レコードとともに新しい User
レコードを作成します。User
レコードは、Post.author
↔ User.posts
および Profile.user
↔ User.profile
リレーションフィールド を介して他の 2 つのレコードに接続されています。
findMany
に include
オプションを渡していることに注意してください。これは、返された User
オブジェクトのリレーション posts
および profile
を含めるように Prisma Client に指示します。
現在の TypeScript セットアップでコードを実行します。tsx
を使用している場合は、次のように実行できます
npx tsx index.ts
次のセクションに進む前に、update
クエリを使用して、作成したばかりの Post
レコードを「公開」します。main
関数を次のように調整します
async function main() {
const post = await prisma.post.update({
where: { title: 'Hello World' },
data: { published: true },
})
console.log(post)
}
現在の TypeScript セットアップでコードを実行します。tsx
を使用している場合は、次のように実行できます
npx tsx index.ts