一、什么是Prisma?
Prisma是Nodejs平台流行的数据库关系映射框架,可以便捷实现数据库的增删改查、
二、Prisma使用
1、下载Prisma
npm install prisma -D
初始化Prisma,并设置要连接的数据库
npx prisma init --datasource-provider 【要连接的数据库】
2、prisma中的模型
表示底层数据库中的表或者集合。
生成 Prisma Client API 的基础
通过使用 prisma migrate
(迁移)经模型映射到数据库表当中。
prisma studio 是 prisma 的 数据库图形化界面,可以查看和编辑数据库。
npx prisma studio
安装 prisma 客户端
npm install @prisma/client
每当更新 Prisma 模式时,都需要运行命令prisma db push来创建新索引并重新生成 Prisma Client
安装@prisma/client包会调用该prisma generate命令,该命令会读取您的 Prisma 模式并生成Prisma 客户端代码。代码默认生成到文件夹中node_modules/.prisma/client。
更改数据模型后,您需要手动重新生成 Prisma Client 以确保node_modules/.prisma/client更新其中的代码:
prisma generate
一旦更改了 .env 文件,执行 pnpx prisma db push 来更新 prisma/client
Prisma Client只负责向数据库发送查询
3、prisma client常见的数据访问api
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
await prisma.user.findUnique(...)
await prisma.user.findMany(...)
await prisma.user.create(...)
await prisma.user.update(...)
await prisma.user.delete(...)
await prisma.user.upsert(...)
4、schema.prisma
schema.prisma由数据源、生成器、数据模型定义组成
Prisma模式文件(简称模式文件、Prisma模式或模式)是prisma设置的主要配置文件。
数据源:指定prisma应该连接的数据源的详细信息(如PostgreSQL数据库)
生成器:指定应根据数据模型生成那些客户端(如Prisma Client)
数据模型定义:指定应用程序模型(每个数据源的数据形状)及其关系
当想 自定义 prisma 模式文件名称时,在使用 prisma generate
命令生成 prisma 客户端时,需要携带参数指明文件路径。
5、命名
模式文件的默认名称是schema.prisma。当模式文件这样命名时,Prisma Cli将在调用Cli命令的目录中自动检测它。
prisma generate --schema ./datdabase/myschema.prisma
将模型名称映射到表或集合
Prisma模型命名约定(单数形式,PascalCase)API不要总是匹配数据库中的表名。在数据库中命名表或集合的常用方法是使用复数形式和蛇箱符号(如 comments)。当使用comments的表检查数据库时,结果Prisma模型将如下:
model comments { //Fields }
但仍然可以遵守命名约定,无需comments通过使用@@map API属性
model Comment { //Fields @@map('comments') }
三、PostgreSQL连接Prisma
PostgreSQL 数据源连接器将 Prisma 连接到 PostgreSQL 数据库服务。
为了连接到 PostgreSQL 数据库服务,你需要在你的 Prisma schema 文件 中配置一个 datasource 块:
schema.prisma
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
在datasource块中有两个字段:
provider:指定PostgreSQL数据源连接器
url:指定PostgreSQL数据库的连接URL。可以使用环境变量来指定
1、连接详情
连接URL
Prisma的数据库连接URL基于PostgreSQL的官方格式,但不支持所有参数,例如schema。
PostgreSQL连接URL需要的组件概述:
基础URL(Base URL)和路径(path)
下面是一个基础URL(base url)和路径(path)的例子
postgresql://USER:PASSWORD@HOST:PORT/DATABASE
基础URL的组成部分:
参数
连接url可以接受参数
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?KEY1=VALUE&KEY2=VALUE&KEY3=VALUE
可以使用的参数
2、配置SSL连接
如果你的数据库使用 SSL,你可以在连接 URL 中添加各种参数。下面是可能用到的参数的概述:
sslmode=(disable|prefer|require)
:
prefer
(默认): 如果可能的话,优先选择 TLS,接受纯文本连接。disable
: 不使用 TLS。require
: 必须使用 TLS,如果不能则连接失败。sslcert=<PATH>
: 服务器证书的路径。这是由数据库服务器用来签署客户证书的根证书。如果该证书不存在于你的系统的受信任的证书存储中时你需要提供它,对于谷歌云,你可能需要提供server-ca.pem
。证书路径是 相对于 ./prisma 目录的sslidentity=<PATH>
: 从客户证书和密钥创建的 PKCS12 证书数据库的路径。这是一个 PKCS12 格式的 SSL 身份文件,你将使用客户的密钥和客户的证书生成它。它将这两个文件合并为一个文件,并通过密码来保护它们(见下一个参数)。你可以通过使用以下命令(使用openssl
)来使用你的客户密钥和客户证书创建这个文件:.openssl pkcs12 -export -out client-identity.p12 -inkey client-key.pem -in client-cert.pem
sslpassword=<PASSWORD>
: 用来保护 PKCS12 文件的密码。上一步中列出的openssl
命令会在创建 PKCS12 文件时要求提供密码,你需要在这里提供同样的密码。sslaccept=(strict|accept_invalid_certs)
:
strict
: 证书中任何缺失的值都会导致错误。对于谷歌云,特别是如果数据库没有域名,证书可能会遗漏域名/IP地址,导致连接时出现错误。accept_invalid_certs
(默认): 绕过这个检查。请注意此设置可能会带来的安全后果。
创建一个SSL连接到你的数据库,你需要
一个根证书文件
一个PKCS12客户端文件
一个PKCS12文件密码
你的数据库连接URL将类似如下:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?sslidentity=client-identity.p12&sslpassword=mypassword&sslcert=rootca.cert
3、通过socket连接
要通过 socket 连接到你的 PostgreSQL 数据库,你必须在连接 URL 中添加一个 host
字段作为 查询参数(而不是将其设置为 URI 的 host
部分)。 然后这个参数的值必须指向包含 socket 的目录,例如:postgresql://USER:POST@localhost/database?host=/var/run/postgresql/
注意,localhost
是必须的,值本身被忽略,可以是任何东西。