最近 prisma 挺火的,他号称是下一代 nodeJs ORM, github 的 star 一直在上升,issue 也有一千多 k,连本地数据库上手玩了一下,真的很不错,附上简单的入门级操作。
一、初始化
1、下载相关包
npm install prisma typescript ts-node @types/node --save-dev
2、创建 tsconfig.json
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
3、创建 Prisma schema 文件和 .env 文件
npx prisma
npx prisma init
4、连接 mysql
// prisma/schema.prisma
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
// .env
DATABASE_URL="mysql://<USER>:<PASSWORD>@HOST:PORT/DATABASE"
二、数据库操作
1、使用 Prisma Migrate 创建数据表
<!-- prisma/schema.prisma -->
model Post {
id Int @id @default(autoincrement())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
title String @db.VarChar(255)
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}
model Profile {
id Int @id @default(autoincrement())
bio String?
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
profile Profile?
}
执行以下命令会创建一份 sql 查询语句文件并且执行,创建三张表格
npx prisma migrate dev --name init
2、数据库读写
(1) 数据库查询
创建 index.ts 文件,写入一下内容
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
const allUsers = await prisma.user.findMany()
console.log(allUsers)
}
main()
.catch((e) => {
throw e
})
.finally(async () => {
await prisma.$disconnect()
})
以上代码实例化了 PrismaClient,prisma.user 即刚刚创建的 user 表,findMany 方法查询 user 表的所有数据,效果跟 select * from 'user'
一样
执行 npx ts-node index.js
输出为 []
(2) 数据库插入更新数据
async function main() {
// 使用 create 插入新的数据await
prisma.user.create({
data: {
name: 'Alice',
email: 'alice@prisma.io',
posts: {
create: { title: 'Hello World' },
},
profile: {
create: { bio: 'I like turtles' },
},
},
})
// 使用 findMany 查询数据
const allUsers = await prisma.user.findMany({
include: {
posts: true,
profile: true,
},
})
console.dir(allUsers, { depth: null })
// 使用 update 更新数据
const post = await prisma.post.update({
where: { id: 1 },
data: { published: true },
})
console.log(post)
}
以上代码调用 create 方法写入一条数据,然后调用 findMany 查询符合条件的数据,这里的的 include 作用相当于 where