news 2026/5/30 22:02:15

prisma

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
prisma

setup

1.安装 Prisma CLI(开发依赖)

npminstallprisma --save-dev

2.安装 Prisma Client(运行时依赖)

npminstall@prisma/client

3.初始化 Prisma 项目

使用 npx prisma init 命令初始化 Prisma 项目。该命令会在项目根目录下创建一个 prisma 文件夹,并生成一个 schema.prisma 文件。
默认创建是postgresql

npx prisma init

3.1指定数据库为sqlite

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.定义数据模型

model User{idInt @id @default(autoincrement())email String @unique name String?}

然后执行命令:

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
加入:

{"type":"module"}

然后就可以正常使用命名导入:

import{PrismaClient}from'@prisma/client';exportconst prisma=new PrismaClient();

方法三:动态导入

const{PrismaClient}=await import('@prisma/client');exportconst 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)

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)

npminstall@prisma/adapter-better-sqlite3
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.同步

直接同步结构模型到数据库,建议在开发环境使用

npx prisma db push

10.测试

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()asyncfunctionmain(){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))// 查询用户 constusers=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

model User{idInt @id @default(autoincrement())email String @unique name String? posts Post[]}model Post{idInt @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 客户端操作

// 创建文章示例 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,})
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 22:18:25

自动收藏功能的实现方法

自动收藏功能的实现方法浏览器扩展自动收藏使用浏览器扩展API(如Chrome的chrome.bookmarks)可以添加书签:chrome.bookmarks.create({title: Example Title,url: https://example.com }, function(newBookmark) {console.log(Bookmark added:,…

作者头像 李华
网站建设 2026/5/28 13:39:24

滴滴出行 wsgsig逆向

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 逆向过程部分python代码cp execjs.com…

作者头像 李华
网站建设 2026/5/28 13:39:25

基于Java技术的大学生跑腿系统的设计与开发 开题报告

目录 研究背景与意义系统功能模块设计技术选型与架构创新点与难点预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 研究背景与意义 随着校园生活节奏加快,大学生对代取快递、代购物品…

作者头像 李华
网站建设 2026/5/29 11:22:36

孤岛模式下两台逆变器下垂控制算法,采用电压外环和电流内环的双闭环控制,可以提供参考文献

孤岛模式下两台逆变器下垂控制算法,采用电压外环和电流内环的双闭环控制,可以提供参考文献。实验室的隔离配电柜突然跳闸,隔壁工位老张的咖啡杯晃出半圈涟漪——两台逆变器并联系统又崩了。凌晨三点的示波器屏幕上,原本稳定的50Hz…

作者头像 李华
网站建设 2026/5/30 15:44:35

Clawdbot安装教程:从零开始到接入飞书

Clawdbot安装教程:从零开始到接入飞书 这几天,Clawdbot把整个科技圈都刷屏了。 就是这个胖逼小龙虾🦞。 不过现在改名叫Moltbot了。 原因很简单:被Anthropic告了。 Anthropic觉得Clawdbot这名字太像Claude Code的延伸产品&…

作者头像 李华
网站建设 2026/5/28 13:39:32

C++ 竟偷师 Python?机器语言:这“龟孙子”我要了!

以下故事纯属虚构,如有雷同,纯属巧合。 人物:"机器语言","C",故事背景是两个程序. 下面是一个C画图程序, #include "sprites.h" //包含C精灵库 Sprite turtle; //建立角色叫turtle int main(){ //主功能…

作者头像 李华