setup
1.安装 Prisma CLI(开发依赖)
bash
npm install prisma --save-dev
2.安装 Prisma Client(运行时依赖)
bash
npm install @prisma/client
3.初始化 Prisma 项目
使用 npx prisma init 命令初始化 Prisma 项目。该命令会在项目根目录下创建一个 prisma 文件夹,并生成一个 schema.prisma 文件。
默认创建是postgresql
bash
npx prisma init
3.1指定数据库为sqlite
bash
npx prisma init --datasource-provider sqlite
3.2把默认数据更改成sqlite
1.更改文件:schema.prisma ,内容如下:
generator client {
provider = "prisma-client-js"
url = env("DATABASE_URL")
}
datasource db {
provider = "sqlite"
}
2.更改环境文件(.env),内容如下:
DATABASE_URL="file:./dev.db"
表示在当前目录下创建dev.db文件:

4.数据配置更改
在.env文件更改相应信息
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
vscode 按装插件
输入:prisma,截图如下:

5.定义数据模型
bash
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
然后执行命令:
bash
npx prisma migrate dev --name init
6.更改或添加模型
每次修改模型后,都需要重新生成客户端代码:
npx prisma generate
7.启动数据库
npx prisma studio
录入三笔数据,效果如图下:

8.其它问题
1.prisma.config.ts中的process 提示不存在
npm install --save-dev @types/node
2.执行main.js 文件报错:
import { PrismaClient } from '@prisma/client';
^^^^^^^^^^^^
SyntaxError: Named export 'PrismaClient' not found. The requested module '@prisma/client' is a CommonJS module, which may not support all module.exports as named exports.
CommonJS modules can always be imported via the default export, for example using:
解决方法一:
import pkg from '@prisma/client';
const { PrismaClient } = pkg;
解决方法二:修改 package.json
加入:
bash
{
"type": "module"
}
然后就可以正常使用命名导入:
bash
import { PrismaClient } from '@prisma/client';
export const prisma = new PrismaClient();
方法三:动态导入
bash
const { PrismaClient } = await import('@prisma/client');
export const prisma = new PrismaClient();
3.错误信息如下:
D:\workspace\node\ormPrisma>npm run dev
> main@1.0.0 dev
> node main.js
node:internal/modules/cjs/loader:1383
const err = new Error(message);
^
Error: Cannot find module '.prisma/client/default'
Require stack:- D:\workspace\node\ormPrisma\node_modules@prisma\client\default.js
at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)
at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)
at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)
bash
npx prisma generate
4.PrismaClientConstructorValidationError: Unknown property datasources provided to PrismaClient constructor.
Read more at https://pris.ly/d/client-constructor
at yl (D:\workspace\node\ormPrisma\node_modules@prisma\client\runtime\client.js:66:3832)
at new t (D:\workspace\node\ormPrisma\node_modules@prisma\client\runtime\client.js:70:1241)
at file:///D:/workspace/node/ormPrisma/main.js:4:16
at ModuleJob.run (node:internal/modules/esm/module_job:345:25)
at async onImport.tracePromise.proto (node:internal/modules/esm/loader:651:26)
at async asyncRunEntryPointWithESMLoader (node:internal/modules/run_main:117:5)
bash
npm install @prisma/adapter-better-sqlite3
bash
import { PrismaClient } from '@prisma/client'
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
//import { PrismaPg } from '@prisma/adapter-pg'
// 创建SQLite适配器
const adapter = new PrismaBetterSqlite3({url:'file:./dev.db'})
// 使用适配器初始化Prisma Client
const prisma = new PrismaClient({
adapter,
// 可选的日志配置
log: [
{
emit: 'stdout',
level: 'query'
},
{
emit: 'stdout',
level: 'info'
},
{
emit: 'stdout',
level: 'warn'
},
{
emit: 'stdout',
level: 'error'
}
]
});
9.同步
直接同步结构模型到数据库,建议在开发环境使用
bash
npx prisma db push
10.测试
bash
import { PrismaClient } from '@prisma/client'
import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3';
//import { PrismaPg } from '@prisma/adapter-pg'
// 创建SQLite适配器
const adapter = new PrismaBetterSqlite3({url:'file:./dev.db'})
// 使用适配器初始化Prisma Client
const prisma = new PrismaClient({
adapter,
// 可选的日志配置
log: [
{
emit: 'stdout',
level: 'query'
},
{
emit: 'stdout',
level: 'info'
},
{
emit: 'stdout',
level: 'warn'
},
{
emit: 'stdout',
level: 'error'
}
]
});
//const prisma = new PrismaClient()
async function main() {
try {
console.log('Connecting to database...');
// 测试基本连接
await prisma.$connect()
console.log('Connected successfully!');
// 创建用户示例
console.log('\n1. 创建用户...')
const cuser = await prisma.user.create({
data: {
name: '张三',
email: 'zhangsan@example.com'
}
})
console.log('创建的用户:', JSON.stringify(cuser))
// 查询用户
const users = await prisma.user.findMany()
console.log('Users:', users)
console.log('用户及文章数据:', JSON.stringify(users, null, 2))
//update
console.log('\n2. 更新用户...')
const uuser = await prisma.user.update({
where: {
id: 1
},
data: {
name: '李四u'
}
})
console.log('更新的用户:', JSON.stringify(uuser))
// //delete
// console.log('\n3. 删除用户...')
// const duser = await prisma.user.delete({
// where: {
// }
// })
} catch (error) {
console.error('Error details:')
console.error('Message:', error.message)
console.error('Stack:', error.stack)
console.error('Name:', error.name)
}
}
// 使用更详细的错误处理
main()
.then(() => {
console.log('Program completed successfully')
})
.catch((error) => {
console.error('Unhandled error in main:', error)
})
.finally(async () => {
console.log('Disconnecting...')
await prisma.$disconnect()
})
关系model
bash
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
client 客户端操作
bash
// 创建文章示例
console.log('\n2. 创建文章...')
const post = await prisma.post.create({
data: {
title: 'Prisma Client 7.3 使用指南',
content: '这是关于如何使用Prisma Client 7.3的详细指南',
author: {
connect: { id: user.id }
}
}
})
console.log('创建的文章:', post)
// 查询数据示例
console.log('\n3. 查询用户及其文章...')
const usersWithPosts = await prisma.user.findMany({
include: {
posts: true
}
})
console.log('用户及文章数据:', JSON.stringify(usersWithPosts, null, 2))
// 更新数据示例
console.log('\n4. 更新文章状态...')
const updatedPost = await prisma.post.update({
where: { id: post.id },
data: { published: true }
})
console.log('更新后的文章:', updatedPost)
// 删除数据示例
console.log('\n5. 删除文章...')
const deletedPost = await prisma.post.delete({
where: { id: post.id }
})
console.log('已删除文章ID:', deletedPost.id)
const result = await prisma.user.create({
data:
name: 'Nikolas',
email: 'burk@prisma.io',
posts: {
create: {
title: 'Second',
content: '2',
},
});
//分页
const result = await prisma. user. findMany({
skip: 2,
take: 2,})