Prisma是一个有趣的ORM。
ORM是数据库上的一个抽象层。
在过去的几个月里,我有幸在一些不同的项目中使用Prisma,在这里我想向你展示它是多么容易上手(和继续使用)。
我将在一个基于Next.js的React应用程序中使用Prisma。
你可以在一个文件夹中创建一个新的Next.js应用程序,其中包括
npx create-next-app
要添加Prisma,你要做的第一件事是在你的开发依赖项中包括prisma 。
npm install -D prisma
现在你可以通过使用npx 来访问Prisma CLI工具。尝试运行。
npx prisma
你会看到关于如何使用它的说明。

现在运行这个来为你的项目设置Prisma。
npx prisma init

这将创建一个prisma 文件夹,并在其中创建一个schema.prisma 文件。
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
它还创建了一个.env 文件,以防你还没有一个文件,以及DATABASE_URL 环境变量。
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
这必须指向你的数据库。
让我们先把这一点说清楚。Prisma支持许多不同类型的(关系型)数据库。我曾在PostgreSQL和SQLite中使用它,但它也支持MySQL、AWS Aurora和MariaDB。
在生产中,我喜欢使用DigitalOcean的管理数据库(强制性的推荐链接,可获得100美元的免费信贷),但对于一个快速的示例应用程序,Railway.app是一个很酷的免费选择。
在你注册之后,你可以通过点击来提供一个PostgreSQL数据库。

之后,你会立即得到连接的URL。

把它复制到你的.env 文件中,作为DATABASE_URL 的值。
现在是时候给模式添加一个模型了,它将被翻译成一个数据库表。
注意,你也可以做相反的事情,如果你有一个已经填充了表的数据库,通过运行
npx prisma introspect。Prisma将从数据库中生成模式。
假设我们是一个花哨的亿万富翁,喜欢收集汽车。我们创建一个Car 模型来存储我们想要购买的汽车列表。
model Car {
id Int @id @default(autoincrement())
brand String
model String
created_at DateTime @default(now())
bought Boolean @default(false)
}
我强烈建议你在Prisma模式参考文档中查找所有内容。
这个模型定义了5个字段。id,brand,model,created_at,bought, 每个字段都有其类型,可以是Int, String, DataTime, 或者Boolean。
id 有 属性,这意味着它是@id 主键,这告诉数据库管理系统要使它唯一。它的默认值是自动递增的,所以每当我们添加一个新的项目时,它总是有一个唯一的整数,会递增。1, 2, 3, 4...
注意,你也可以用@default(cuid()) 或@default(uuid()) 来使用一个唯一的值。
created_at 使用 ,默认为当前日期时间,而 ,默认为 。@default(now()) bought false
现在我们需要将数据库与我们的模式进行同步。我们通过运行命令npx prisma migrate 来创建我们的第一次迁移。
npx prisma migrate dev
现在你可以看到在数据库中,会有一个Car 表。


以及在你的代码库中的prisma/migrations 文件夹中的一个文件,其中有用于创建这些表的命令,在这种情况下。
-- CreateTable
CREATE TABLE "Car" (
"id" SERIAL NOT NULL,
"brand" TEXT,
"model" TEXT,
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
"bought" BOOLEAN NOT NULL DEFAULT false,
PRIMARY KEY ("id")
);
任何时候你改变了模式,你需要运行这个npx prisma migrate dev 命令来应用这些变化。
很好!现在我们可以使用Prisma向数据库插入数据、检索数据、删除数据......等等。
现在安装@prisma/client 包,用
npm install @prisma/client
创建一个lib 文件夹,并在其中创建一个prisma.js 文件。在那里,我们初始化PrismaClient对象。
import { PrismaClient } from '@prisma/client'
let global = {}
const prisma = global.prisma || new PrismaClient()
if (process.env.NODE_ENV === 'development') global.prisma = prisma
export default prisma
这段代码是必要的,以避免我们在开发模式下运行时对Prisma的过度实例化,由于热模块重载而频繁刷新。我们基本上是在第一次运行时将
prisma到一个全局变量,并在接下来的时间里重复使用该变量。
现在在你想使用Prisma的任何文件中,你可以添加
import prisma from 'lib/prisma'
然后你就可以开始了。
要检索所有的汽车,你可以使用prisma.car.findMany() 。
const cars = await prisma.car.findMany()
你可以传递一个对象来过滤数据,例如选择所有的Ford 汽车。
const cars = await prisma.car.findMany({
where: {
brand: 'Ford',
},
})
你可以通过它的id 值来寻找一辆车,使用prisma.car.findUnique() 。
const car = await prisma.car.findUnique({
where: {
id: 1,
},
})
你可以使用prisma.car.create() 添加一辆新车。
const car = await prisma.car.create({
brand: 'Ford',
model: 'Fiesta',
})
你可以通过使用prisma.car.delete() 删除一辆汽车。
await prisma.job.delete({
where: { id: 1 },
})
你可以使用prisma.car.update() 来更新一辆车的数据。
await prisma.job.delete({
where: { id: 1 },
data: {
bought: true
}
})
你还可以做更多的事情,但这些都是基本的,是你开始工作所需要的,也是你在一个简单的CRUD应用中所需要的95%的内容。