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 生成迁移文件
参考资料