一个简单的案例,链接mysql
1. 创建项目
创建一个项目名为prisma-demo,并初始化和下载依赖
npm init -y
npm install prisma typescript ts-node @types/node --save-dev
创建一个tsconfig.json
文件,并向其中添加以下配置:
{
"compilerOptions": {
"sourceMap": true,
"outDir": "dist",
"strict": true,
"lib": ["esnext"],
"esModuleInterop": true
}
}
通过npx 来调用prisma cli
npx prisma
通过以下命令来创建Prisma schema 文件来设置Prisma 项目
npx prisma init
这个命令创建了一个名为prisma
的新目录,其中包含一个名为schema.prisma
的文件和一个位于项目根目录中的.env
文件schema.prisma
包含prisma模式以及数据库连接和prisma客户端生成器。 .env
是一个dotenv用于定义环境变量的文件(用于数据库连接)
链接数据库
Prisma/schema.prisma文件修改如下
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql" // 修改为mysql,即是那个数据库
url = env("DATABASE_URL")
}
.env 中链接数据库
DATABASE_URL="mysql://root:mysql密码@localhost:3306/数据库名"
// 案例
DATABASE_URL="mysql://root:password@localhost:3306/mydb"
使用 Prisma 迁移
prisma/schema.prisma 文件中添加如下案例
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
要将数据模型映射到数据库架构,需要使用prisma migrate
CLI命令
npx prisma migrate dev --name init
上面命令为2项:
- 为这次迁移创建一个心的sql 迁移文件
- 对数据库运行sql迁移文件
安装prisma client
要开始使用Prisma Client,需要安装@prisma/client
npm install @prisma/client
注意,安装命令会自动调用prisma generate
,它会读取prisma模式并生成一个适合您的模型的prisma Client版本。
以后每当您对 Prisma 架构进行更改时,您都需要手动调用prisma generate
以适应 Prisma 客户端 API 中的更改。
npx prisma generate
数据库查询
创建一个index.ts文件
import {PrismaClient} from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
await prisma.user.create({ // 插入数据
data: {
name: '李四', // 数据库表中对应的字段
email: 'test@qq.com'
}
})
const user = await prisma.user.findMany() // 查询数据库所有数据
console.log(user)
}
main()
.catch((e) => {
throw e
})
.finally(async () => {
await prisma.$disconnect() // 执行完后关闭服务
})
执行以下命令,插入数据和查询数据
npx ts-node index.ts
表关联案例
模型类型
model Post {
id Int @id @default(autoincrement()) // 默认值和自增,还有就是ID
createAt DateTime @default(now()) // 时间类型,默认为现在时间
updateAt DateTime @updatedAt // 更新时间
title String @db.VarChar(255) // 字符串长度
content String? // ?表示可以不填
published Boolean @default(false)
authorId Int // 一个外链
author User @relation(fields: [authorId],references: [id]) // 设置外链
}
model User {
id Int @id @default(autoincrement())
email String @unique // 唯一性
name String?
posts Post[] // 表示一个用户有多篇文章
}
插入数据
await prisma.user.create({
data: {
name: '王五',
email: 'test13@qq.com',
posts: { // 外表的数据
create: { // 表示创建以下属性数据
title: '标题rrr',
content:'内容222'
}
}
}
})
查询关联数据
// 查询所有
const user = await prisma.user.findMany({
include: { // 包含返回外链内容
posts: true
},
})
// 输出的user 是一个数组并包含posts
条件查询
const user1 = await prisma.user.findMany({
where: { // 查询条件
name: '王五' // 查询name === '王五'的数据
},
})
// 查询name === '王五' 并且返回包含posts数据
const user1 = await prisma.user.findMany({
where: { // 查询条件
name: '王五'
},
include: {
posts: true
}
})
console.log(user1)
更新数据
// 修改ID==1的人名称
let user = await prisma.user.update({
where: { // 条件
id: 1
},
data: { // 要修改的数据
name: '旺财'
}
})
console.log(user) // 输出修改后的数据
删除
// 删除ID为1的数据
let postData = await prisma.post.delete({
where: {
id: 1
}
})
console.log(postData)