连接 URL
Prisma ORM 需要一个连接 URL 才能连接到您的数据库,例如使用 Prisma Client 发送查询或使用 Prisma Migrate 更改数据库 schema 时。
连接 URL 通过 Prisma schema 中 `datasource` 块的 `url` 字段提供。它通常包含以下组件(SQLite 和 Prisma Postgres 除外):
- 用户:您的数据库用户名
- 密码:您的数据库用户密码
- 主机:您的数据库服务器运行所在机器的 IP 地址或域名
- 端口:您的数据库服务器运行的端口
- 数据库名称:您要使用的数据库名称
开始使用 Prisma ORM 时,请确保您手头有这些信息。如果您还没有运行数据库服务器,可以使用本地 SQLite 数据库文件(参见快速入门)或使用 Prisma Postgres 设置一个免费的 PostgreSQL 数据库。
格式
连接 URL 的格式取决于您使用的数据库连接器。Prisma ORM 通常支持每种数据库的标准格式。您可以在专门的文档页面上找到有关数据库连接 URL 的更多信息:
特殊字符
对于 MySQL、PostgreSQL 和 CockroachDB,您必须对连接 URL 的任何部分(包括密码)中的特殊字符进行百分比编码。例如,`p@$$w0rd` 会变成 `p%40%24%24w0rd`。
对于 Microsoft SQL Server,您必须转义连接字符串任何部分中的特殊字符。
示例
以下是 Prisma ORM 支持的数据库连接 URL 示例:
Prisma Postgres
Prisma Postgres 是一个运行在 unikernels 上的托管 PostgreSQL 服务。有几种连接到 Prisma Postgres 的方式:
- 通过直接 TCP 连接(允许您通过任何 ORM 或数据库工具连接)
- 通过 Prisma Accelerate(仅 Prisma ORM 支持)
- 本地
这些连接字符串的格式将在下面介绍。
直接 TCP
当您通过直接 TCP 连接到 Prisma Postgres 时,您的连接字符串如下所示:
DATABASE_URL="postgres://USER:PASSWORD@postgres.prisma-data.net:5432/?sslmode=require"
`USER` 和 `PASSWORD` 值是在您为 Prisma Postgres 实例生成凭据时提供的。这是一个带示例值的例子:
DATABASE_URL="postgres://2f9881cc7eef46f094ac913df34c1fb441502fe66cbe28cc48998d4e6b20336b:sk_QZ3u8fMPFfBzOID4ol-mV@postgres.prisma-data.net:5432/?sslmode=require"
通过 Prisma Accelerate (HTTP)
通过 Prisma Accelerate 连接时,连接字符串不需要像传统连接字符串那样提供用户/密码。相反,身份验证通过 API 密钥进行:
datasource db {
provider = "postgresql"
url = "prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"
}
在此代码片段中,`API_KEY` 是一个占位符,代表您通过以下方式设置新的 Prisma Postgres 实例时获得的 API 密钥:。以下是一个实际的 Prisma Postgres 连接 URL 示例:
datasource db {
provider = "postgresql"
url = "prisma+postgres://accelerate.prisma-data.net/?api_key=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcGlfa2V5IjoiMGNkZTFlMjQtNzhiYi00NTY4LTkyM2EtNWUwOTEzZWUyNjU1IiwidGVuYW50X2lkIjoiNzEyZWRlZTc1Y2U2MDk2ZjI4NDg3YjE4NWMyYzA2OTNhNGMxNzJkMjhhOWFlNGUwZTYxNWE4NWIxZWY1YjBkMCIsImludGVybmFsX3NlY3JldCI6IjA4MzQ2Y2RlLWI5ZjktNDQ4Yy04NThmLTMxNjg4ODEzNmEzZCJ9.N1Za6q6NfInzHvRkud6Ojt_-RFg18a0601vdYWGKOrk"
}
本地 Prisma Postgres
连接 本地 Prisma Postgres 实例的连接字符串与通过 Accelerate 连接远程实例的结构类似:
datasource db {
provider = "postgresql"
url = "prisma+postgres://accelerate.prisma-data.net/?api_key=API_KEY"
}
然而,在这种情况下,`API_KEY` 不提供身份验证详细信息。相反,它编码了有关本地 Prisma Postgres 实例的信息。您可以通过 `prisma dev` 命令获取本地连接字符串。
PostgreSQL
datasource db {
provider = "postgresql"
url = "postgresql://janedoe:mypassword@localhost:5432/mydb?schema=sample"
}
MySQL
datasource db {
provider = "mysql"
url = "mysql://janedoe:mypassword@localhost:3306/mydb"
}
Microsoft SQL Server
datasource db {
provider = "sqlserver"
url = "sqlserver://localhost:1433;initial catalog=sample;user=sa;password=mypassword;"
}
SQLite
datasource db {
provider = "sqlite"
url = "file:./dev.db"
}
CockroachDB
datasource db {
provider = "cockroachdb"
url = "postgresql://janedoe:mypassword@localhost:26257/mydb?schema=public"
}
MongoDB
datasource db {
provider = "mongodb"
url = "mongodb+srv://root:<password>@cluster0.ab1cd.mongodb.net/myDatabase?retryWrites=true&w=majority"
}
.env
您也可以将连接 URL 作为环境变量提供:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
然后,您可以在终端中设置环境变量,或者提供一个名为 `.env` 的 dotenv 文件。Prisma CLI 将自动识别它。
Prisma ORM 在以下情况下从 dotenv 文件读取连接 URL:
- 在构建时更新 schema 时
- 在运行时连接到数据库时
DATABASE_URL=postgresql://janedoe:mypassword@localhost:5432/mydb