设置
安装 Prisma Dart 客户端,您需要在项目中创建一个 prisma/schema.prisma
文件。此文件是 Prisma 的核心文件,用于定义您的数据模型和数据库连接。
bun prisma init
npx prisma init
pnpx prisma init
--datasource-provider
选项不是必需的,因为 Prisma Dart 客户端会自动为您生成 datasource
配置
提供程序 | 描述 | 示例 |
---|---|---|
postgresql | 初始化一个 PostgreSQL 数据库 | npx prisma init --datasource-provider=postgresql |
mysql | 初始化一个 MySQL 数据库 | npx prisma init --datasource-provider=mysql |
sqlite | 初始化一个 SQLite 数据库 | npx prisma init --datasource-provider=sqlite |
sqlserver | 初始化一个 SQL Server 数据库 | npx prisma init --datasource-provider=sqlserver |
mongodb | 初始化一个 MongoDB 数据库 | npx prisma init --datasource-provider=mongodb |
cockroachdb | 初始化一个 CockroachDB 数据库 | npx prisma init --datasource-provider=cockroachdb |
初始化后,以下文件将出现在您的项目目录中
...
├── prisma
│ └─── schema.prisma
└─── .env
Dart 项目依赖项
您的项目的 pubspec.yaml
文件应如下所示
name: your_project_name
description: your_project_description
dependencies:
orm: latest
// ...
dev_dependencies: ...
Dot env 文件 .env
.env
文件用于存储环境变量。它应如下所示
# Environment variables declared in this file are automatically made available to Prisma.
# See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema
# Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
# See the documentation for all the connection string options: https://pris.ly/d/connection-strings
DATABASE_URL="postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public"
Prisma 模式文件 prisma/schema.prisma
初始化后,prisma/schema.prisma
文件应如下所示
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "dart run orm"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
生成
通过运行以下命令生成 Prisma Dart 客户端
bun prisma generate
npx prisma generate
pnpx prisma generate
这将在您定义的 output
目录中生成 Prisma Dart 客户端。
默认输出目录为
prisma/generated_dart_client/
。
将生成以下文件
client.dart
- Prisma 客户端实现。model.dart
- 您的 Prisma 模式模型、视图和枚举。prisma.dart
- 自动生成的 Prisma 客户端类型。
实例化 Prisma 客户端
您可以通过导入生成的 client.dart
文件并调用 PrismaClient
构造函数来实例化 Prisma 客户端
import 'prisma/generated_dart_client/client.dart';
final prisma = PrismaClient();
推荐用法
如果您在命令行应用程序或没有错误拦截并在抛出异常时退出进程的应用程序中使用它,我们建议将其包装在以下结构中
final prisma = PrismaClient();
void main(List<String> args) async {
try {
// Your code here
} catch (e) {
// Handle error here
} finally {
await prisma.$disconnect();
}
}
为什么需要使用 finally
包装器进行 try/catch
?
目前,Prisma Dart 客户端仅支持 **二进制引擎**。当您执行第一个查询或调用 prisma.$connect()
时,客户端将自动启动引擎进程。当您调用 prisma.$disconnect()
时,客户端将自动关闭引擎进程。
如果您没有在应用程序中包装 try/catch
,当您的应用程序抛出异常时,引擎进程将不会关闭,这将导致引擎进程一直运行,直到您在系统进程管理器中手动关闭它。
Shelf 服务器
运行 Shelf 服务器时,您可以使用以下 main 方法优雅地处理错误并在断开 Prisma 客户端连接之前等待服务器关闭
import 'package:shelf/shelf_io.dart' as io;
import 'package:shelf_docker_shutdown/shelf_docker_shutdown.dart';
Future<void> main() async{
final prisma = PrismaClient();
final handler = MyHandler();
try {
final server = await io.serve(handler, 'localhost', 8080);
await server.closeOnTermSignal();
await prisma.$disconnect();
} catch (e) {
// Handle error here
await prisma.$disconnect();
}
}