侧边栏壁纸
博主头像
xuesheng博主等级

分享web知识,学习就是取悦自己!

  • 累计撰写 118 篇文章
  • 累计创建 14 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

使用 Prisma 设置 MySQL 数据库

xuesheng
2023-03-09 / 0 评论 / 0 点赞 / 342 阅读 / 870 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2023-03-09,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Prisma 是一个开源的 Node.jsTypescript ORM(对象关系映射器),它充当应用程序和数据库之间的一种中间件,帮助您管理和使用数据库。它目前支持 PostgreSQLMySQLSQL ServerSQLite,它的一些功能也支持 MongoDB

我最近的任务是使用 Next.js 应用程序设置 MySQL 数据库。我的目标是使用 Next.js 的无服务器功能连接数据库。

以下是我为实现这一目标而采取的步骤。

安装并调用 Prisma

为了在项目中使用 Prisma,首先将其 CLI 安装为开发依赖项。

npm install prisma --save-dev

下一步是初始化 Prisma。您只需在设置过程中执行一次。

npx prisma init

此时,Prisma CLI 在您的根目录中创建了一些文件。prisma文件夹中的schema.prisma文件是我们定义数据源提供程序和数据库中表的模式的地方。但是,如果您已经有一个现有的数据库,则无需从头开始创建模式,因为Prisma会为您处理 😉。我很快就会告诉你。

连接数据库

第一步是将schema.prisma文件中的数据源提供程序修改为如下所示。

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")
}

我将provider设置为我正在使用的数据库类型。在我的例子中,它是mysqlurl属性将采用 Prisma 创建的.env文件中定义的连接url的值。

DATABASE_URL="mysql://USER:PASSWORD@HOST:PORT/DATABASE"

以上是如何编写连接 url 的格式。

生成数据模型

下一步是生成数据模型/模式。这是如何发生的; Prisma 使用您提供的连接 url 连接到数据库。 Prisma 和数据库进行了简短的交谈,然后 Prisma 会返回数据库结构的模型,即数据类型、关系以及它需要了解的有关数据库的任何其他信息😄

为此,我们运行命令

npx prisma db pull

如果命令成功运行,Prisma 将从 MySQL 生成模型到保存在prisma.schema文件中的 Prisma 数据模型中。如果 Prisma 模式对您来说是新的,请查看他们的文档

从数据库中读取数据

为了使用Prisma执行 CRUD(创建、读取、更新、删除)操作,我们需要安装@prisma/client包。

npm install @prisma/client

创建一个Prisma实例

安装软件包后,下一个重要步骤是创建一个 Prisma 实例,该实例将被导入到我们需要使用它的任何地方。我们需要单个实例的原因是因为每次我们在一个文件中初始化 Prisma 客户端时,它都会创建一个到数据库的连接器,如果在多个文件中初始化它可能会耗尽数据库连接限制。

// utils/prisma.js

import { PrismaClient } from "@prisma/client";
let prisma;

if (process.env.NODE_ENV === "production") {
    prisma = new PrismaClient();
}
// `stg` or `dev`
else {
    if (!global.prisma) {
        global.prisma = new PrismaClient();
    }

    prisma = global.prisma;
}

export default prisma;

从数据库中取数据

N/B Prisma Client 从后端工作,因此我们必须从无服务器函数或Nodejs应用程序调用它。

// /pages/api/fetchUsers.js

import prisma from "../../utils/prisma";

export default async function handler(req, res) {
    try {
        const results = await prisma.users.findMany();
        return res.status(200).json(results);
    } catch (error) {
        return res.status(500).json({ message: error.message });
    }
}

0

评论区