prisma 简介
初始化项目
mkdir prisma-demo
cd prisma-demo
npm init -y
npm install prisma -D
npx prisma init
npx prisma init --datasource-provider sqlite
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
// 用户模型
model user {
id String @id @unique @default(uuid())
// @map 作用是将数据库中的字段名映射为 user_name
userName String @unique @map("user_name")
password String @default("")
nickName String @default("") @map("nick_name")
address String @default("")
createAt DateTime @default(now()) @map("create_at")
updateAt DateTime @default(now()) @map("update_at")
post post[]
// @@map 作用是将数据库中的表名映射为 users
@@map("users")
}
// 文章模型
model post {
id String @id @unique @default(uuid())
title String @default("")
desc String @default("")
content String @default("")
createAt DateTime @default(now()) @map("create_at")
updateAt DateTime @default(now()) @map("update_at")
// 一篇文章只能属于一个用户
user user @relation(fields: [userId], references: [id])
// @map 作用是将数据库中的字段名映射为 user_id
userId String @map("user_id")
createdAt DateTime @default(now()) @map("created_at")
updatedAt DateTime @default(now()) @map("updated_at")
}
const { PrismaClient } = require('@prisma/client')
const db = new PrismaClient()
db.$connect().catch((err) => {
console.error(err)
process.exit(1)
})
module.exports = db
数据库操作
const db = require('./utils/db')
async function createUser() {
try {
await db.user.create({
data: {
userName: '小黑',
password: '123456',
nickName: '小黑',
},
})
console.log('创建用户成功')
} catch (error) {
console.error(error)
}
}
createUser()
async function getUserList() {
const userList = await db.user.findMany({
select: {
userName: true,
nickName: true,
},
})
console.log('查询用户列表成功', userList)
}
getUserList()
async function createPost() {
const user = await db.user.findFirst()
try {
await db.post.create({
data: {
title: '第一篇文章',
content: '第一篇文章的内容',
userId: user.id,
},
})
console.log('创建文章成功')
} catch (error) {
console.error(error)
}
}
createPost()
async function getPostList() {
const postList = await db.post.findMany({
select: {
title: true,
content: true,
user: {
select: {
userName: true,
nickName: true,
},
},
},
})
console.log('查询文章列表成功', postList)
}
prisma 常用命令
npx prisma init
初始化项目
npx prisma migrate dev
生成数据库
npx prisma studio
可视化查看数据库
npx prisma migrate reset
重置数据库
npx prisma migrate deploy
部署数据库
npx prisma generate
生成 prisma client
npx prisma introspect
生成 prisma schema
npx prisma format
格式化 prisma schema
npx prisma migrate save --experimental
生成迁移文件
npx prisma migrate up --experimental
执行迁移文件
npx prisma migrate down --experimental
回滚迁移文件
npx prisma migrate resolve
解决迁移文件冲突
npx prisma migrate status
查看迁移文件状态
npx prisma db push
生成数据库
npx prisma db pull
从数据库生成 prisma schema
npx prisma db seed
生成数据库种子数据
npx prisma db seed --preview-feature
生成数据库种子数据
npx prisma db seed --preview-feature --reset
重置数据库种子数据
npx prisma db seed --preview-feature --reset --force
强制重置数据库种子数据
npx prisma migrate dev --name init
生成迁移文件
npx prisma migrate dev --name init --create-only
生成迁移文件
npx prisma migrate dev --name init --create-only --preview-feature
生成迁移文件
参考资料