从 CLI
本页提供了在使用 prisma init --db
设置 Prisma Postgres 后的分步指南。
- 使用 Prisma ORM 设置一个 TypeScript 应用
- 迁移数据库模式
- 从 TypeScript 查询数据库
先决条件
本指南假设您使用 prisma init --db
设置了 Prisma Postgres 实例。
npx prisma@latest init --db
此命令终止后
- 您已登录到 Prisma Data Platform。
- 已创建一个新的 Prisma Postgres 实例。
- 已创建
prisma/
文件夹,其中包含一个空的schema.prisma
文件。 - 在
.env
文件中设置了DATABASE_URL
环境变量。
1. 组织您的项目目录
如果您在您希望项目所在的文件夹中运行了 prisma init --db
命令,则可以跳过此步骤,继续下一节。
如果您在预期项目目录之外(例如,在您的主文件夹或其他位置)运行了该命令,您需要将生成的 prisma
文件夹和 .env
文件移动到专门的项目目录中。
创建一个新的文件夹(例如 hello-prisma
),作为您的项目目录,并将必要的文件移入其中
mkdir hello-prisma
mv .env ./hello-prisma/
mv prisma ./hello-prisma/
进入您的项目文件夹
cd ./hello-prisma
现在您的项目位于正确的位置,请继续设置。
2. 设置您的项目
2.1. 设置 TypeScript
初始化一个 TypeScript 项目并将 Prisma CLI 添加为开发依赖
npm init -y
npm install typescript tsx @types/node --save-dev
这会创建一个 package.json
文件,其中包含 TypeScript 应用的初始设置。
接下来,在项目中用 tsconfig.json
文件初始化 TypeScript
npx tsc --init
2.2. 设置 Prisma ORM
安装使用 Prisma Postgres 所需的依赖项
npm install prisma --save-dev
npm install @prisma/extension-accelerate
2.3. 创建一个 TypeScript 脚本
在根目录中创建一个 index.ts
文件,这将用于使用 Prisma ORM 查询您的应用
touch index.ts
3. 迁移数据库模式
更新您的 prisma/schema.prisma
文件以包含一个简单的 User
模型
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
添加模型后,使用 Prisma Migrate 迁移您的数据库
npx prisma migrate dev --name init
4. 使用 Prisma ORM 发送查询
将以下样板代码粘贴到 index.ts
中
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
// ... you will write your Prisma ORM queries here
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
此代码包含一个在脚本末尾调用的 main
函数。它还实例化了 PrismaClient
,您将使用它向数据库发送查询。
4.1. 创建一个新的 User
记录
让我们从一个小的查询开始,在数据库中创建一个新的 User
记录并将结果对象打印到控制台。将以下代码添加到您的 index.ts
文件中
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
接下来,使用以下命令执行脚本
npx tsx index.ts
{ id: 1, email: 'alice@prisma.io', name: 'Alice' }
干得好,您刚刚使用 Prisma Postgres 创建了您的第一个数据库记录!🎉
4.2. 检索所有 User
记录
Prisma ORM 提供了多种从数据库读取数据的查询。在本节中,您将使用 findMany
查询,它返回给定模型在数据库中的所有记录。
删除之前的 Prisma ORM 查询并添加新的 findMany
查询
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
const users = await prisma.user.findMany()
console.log(users)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
再次执行脚本
npx tsx index.ts
[{ id: 1, email: 'alice@prisma.io', name: 'Alice' }]
注意控制台中单个 User
对象现在被方括号括起来了。这是因为 findMany
返回了一个包含单个对象的数组。
4.3. 探索关联查询
Prisma ORM 的主要功能之一是轻松处理关联。在本节中,您将学习如何在嵌套写入查询中创建 User
和 Post
记录。之后,您将了解如何使用 include
选项从数据库中检索关联。
首先,调整您的脚本以包含嵌套查询
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
const user = await prisma.user.create({
data: {
name: 'Bob',
email: 'bob@prisma.io',
posts: {
create: [
{
title: 'Hello World',
published: true
},
{
title: 'My second post',
content: 'This is still a draft'
}
],
},
},
})
console.log(user)
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
通过再次执行脚本来运行查询
npx tsx index.ts
{ id: 2, email: 'bob@prisma.io', name: 'Bob' }
为了同时检索属于某个 User
的 Post
记录,您可以通过 posts
关联字段使用 include
选项
import { PrismaClient } from '@prisma/client'
import { withAccelerate } from '@prisma/extension-accelerate'
const prisma = new PrismaClient().$extends(withAccelerate())
async function main() {
const usersWithPosts = await prisma.user.findMany({
include: {
posts: true,
},
})
console.dir(usersWithPosts, { depth: null })
}
main()
.then(async () => {
await prisma.$disconnect()
})
.catch(async (e) => {
console.error(e)
await prisma.$disconnect()
process.exit(1)
})
再次运行脚本以查看嵌套读取查询的结果
npx tsx index.ts
[
{ id: 1, email: 'alice@prisma.io', name: 'Alice', posts: [] },
{
id: 2,
email: 'bob@prisma.io',
name: 'Bob',
posts: [
{
id: 1,
title: 'Hello World',
content: null,
published: true,
authorId: 2
},
{
id: 2,
title: 'My second post',
content: 'This is still a draft',
published: false,
authorId: 2
}
]
}
]
这次,您将看到两个 User
对象被打印出来。它们都带有一个 posts
字段("Alice"
的该字段为空,而 "Bob"
的则填充了两个 Post
对象),该字段表示与它们关联的 Post
记录。
下一步
您刚刚初步了解了基本的 Prisma Postgres 设置。如果您想探索更复杂的查询,例如添加缓存功能,请查看官方的快速入门。
在 Prisma Studio 中查看和编辑数据
Prisma ORM 带有一个内置的 GUI,用于查看和编辑数据库中的数据。您可以使用以下命令打开它
npx prisma studio
使用 Prisma Postgres,您还可以在中直接使用 Prisma Studio,方法是在项目中选择Studio 选项卡。
使用 Next.js 构建全栈应用
学习如何在全栈应用中使用 Prisma Postgres
- 使用 Next.js 15 构建全栈应用
- Next.js 15 示例应用 (包括身份验证)
探索可直接运行的示例
查看 GitHub 上的 prisma-examples
仓库,了解如何将 Prisma ORM 与您喜爱的库一起使用。该仓库包含 Express、NestJS、GraphQL 的示例,以及 Next.js 和 Vue.js 的全栈示例等等。
这些示例默认使用 SQLite,但您可以按照项目 README 中的说明,通过几个简单的步骤切换到 Prisma Postgres。
与 Prisma 保持联系
通过与 我们的活跃社区联系,继续您的 Prisma 之旅。保持信息畅通,参与其中,并与其他开发者协作
- 在 X 上关注我们 以获取公告、直播活动和有用技巧。
- 加入我们的 Discord 提问、与社区交流并通过对话获得积极支持。
- 在 YouTube 上订阅 获取教程、演示和直播。
- 在 GitHub 上互动 通过给仓库加星、报告问题或贡献代码。