zenstack-migrate-from-prisma
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMigrating from Prisma to ZenStack V3
从 Prisma 迁移到 ZenStack V3
ZenStack V3 is designed as a drop-in upgrade path for Prisma: it keeps a Prisma-compatible query API
and a schema language (ZModel) that is a superset of the Prisma schema. Most apps migrate with
mechanical changes and no query rewrites. Supported databases: PostgreSQL, MySQL, SQLite.
For general setup/CLI details see ; for the client/dialect see
; for schema syntax see .
zenstack-project-setupzenstack-queryingzenstack-schema-modelingZenStack V3 旨在提供一条 Prisma 的无缝升级路径:它保留与 Prisma 兼容的查询 API,并使用一种作为 Prisma schema 超集的 schema 语言(ZModel)。大多数应用只需进行机械化更改即可完成迁移,无需重写查询。支持的数据库:PostgreSQL, MySQL, SQLite。
有关常规设置和 CLI 的详细信息,请参阅 ;有关客户端/dialect,请参阅 ;有关 schema 语法,请参阅 。
zenstack-project-setupzenstack-queryingzenstack-schema-modelingAt a glance
概览
| Prisma | ZenStack V3 |
|---|---|
| |
| |
| |
| |
| |
| bundled DB engine | you install a DB driver ( |
| Prisma | ZenStack V3 |
|---|---|
| |
| |
| |
| |
| |
| 内置数据库引擎 | 自行安装数据库驱动( |
Step 1 — Swap dependencies
第 1 步——替换依赖项
bash
npm uninstall prisma @prisma/client
npm install @zenstackhq/schema @zenstackhq/orm
npm install --save-dev @zenstackhq/cliZenStack does not bundle a database engine — install the driver for your database:
| Database | Install |
|---|---|
| PostgreSQL | |
| MySQL | |
| SQLite | |
has a peer dependency on@zenstackhq/cli, which is installed automatically when needed for migration commands (ZenStack's migrate commands wrap Prisma Migrate).prisma
bash
npm uninstall prisma @prisma/client
npm install @zenstackhq/schema @zenstackhq/orm
npm install --save-dev @zenstackhq/cliZenStack 不捆绑数据库引擎——请为你的数据库安装驱动:
| 数据库 | 安装命令 |
|---|---|
| PostgreSQL | |
| MySQL | |
| SQLite | |
对@zenstackhq/cli有一个 peer dependency,在 migration 命令需要时会自动安装(ZenStack 的 migrate 命令会包装 Prisma Migrate)。prisma
Step 2 — Move and rename the schema
第 2 步——移动并重命名 schema
Move → . No edits are required — every valid Prisma
schema is valid ZModel. Optional cleanup:
schema.prismazenstack/schema.zmodel- Drop the block (no effect in ZenStack — code gen is driven by
generator client { ... }).zen generate - The block is kept; its
datasourceis used by the migration engine (the ORM runtime gets its connection from the driver/dialect instead).url - If you used Prisma's multi-file/multi-schema feature, merge files using ZModel statements.
import
Run to confirm the converted schema is valid (syntax + semantics) before moving on.
zen checkOnce moved, you can start adding ZenStack-only features that Prisma lacks — access policies
(), polymorphism, typed JSON, mixins, computed fields
().
zenstack-access-control@@delegatezenstack-schema-modeling将 移动至 。无需进行任何编辑——每个有效的 Prisma schema 都是有效的 ZModel。可选清理:
schema.prismazenstack/schema.zmodel- 删除 块(在 ZenStack 中不起作用——代码生成由
generator client { ... }驱动)。zen generate - 保留 块;其
datasource供 migration engine 使用(ORM runtime 的连接则来自 driver/dialect)。url - 如果使用了 Prisma 的 multi-file/multi-schema 功能,请使用 ZModel 语句合并文件。
import
运行 ,在继续之前确认转换后的 schema 在语法和语义上均有效。
zen check完成迁移后,可以开始添加 Prisma 尚不具备的 ZenStack 专属功能——访问策略()、 多态、类型化 JSON、mixins、计算字段()。
zenstack-access-control@@delegatezenstack-schema-modelingStep 3 — Update the generate script
第 3 步——更新生成脚本
json
{ "scripts": { "generate": "zen generate" } }Run after every schema change, before using the client.
zen generatejson
{ "scripts": { "generate": "zen generate" } }每次更改 schema 后、使用客户端前,请运行 。
zen generateStep 4 — Replace the client
第 4 步——替换客户端
Swap for , supplying a Kysely dialect
for your driver (see for all dialects). PostgreSQL example:
new PrismaClient()new ZenStackClient(schema, { dialect })zenstack-queryingts
import { ZenStackClient } from '@zenstackhq/orm';
import { PostgresDialect } from '@zenstackhq/orm/dialects/postgres';
import { schema } from './zenstack/schema';
import { Pool } from 'pg';
export const db = new ZenStackClient(schema, {
dialect: new PostgresDialect({
pool: new Pool({ connectionString: process.env.DATABASE_URL }),
}),
});Your existing ///etc. calls keep working — the ORM API is
Prisma-compatible.
findManycreateupdate将 替换为 ,并为你的驱动提供 Kysely dialect(所有 dialect 请参阅 )。PostgreSQL 示例:
new PrismaClient()new ZenStackClient(schema, { dialect })zenstack-queryingts
import { ZenStackClient } from '@zenstackhq/orm';
import { PostgresDialect } from '@zenstackhq/orm/dialects/postgres';
import { schema } from './zenstack/schema';
import { Pool } from 'pg';
export const db = new ZenStackClient(schema, {
dialect: new PostgresDialect({
pool: new Pool({ connectionString: process.env.DATABASE_URL }),
}),
});现有的 // 等调用仍然可用——ORM API 与 Prisma 兼容。
findManycreateupdateStep 5 — Update type references
第 5 步——更新类型引用
- Model types (e.g. ) — import from the generated
User.models - Input/argument types (e.g. ) — import from the generated
UserCreateArgs.input
Most code relies on inferred types and needs no explicit imports.
- 模型类型(例如 )— 从生成的
User导入。models - 输入/参数类型(例如 )— 从生成的
UserCreateArgs导入。input
大多数代码依赖推断类型,因此不需要显式导入。
Step 6 — Update migration scripts
第 6 步——更新 migration 脚本
json
{
"scripts": {
"db:push": "zen db push",
"migrate:dev": "zen migrate dev",
"migrate:deploy": "zen migrate deploy"
}
}Move your existing migration history from to (ZenStack's
default location, next to ). It continues to work unchanged since ZenStack
migrate wraps Prisma Migrate. See the skill for the full migration workflow.
prisma/migrationszenstack/migrationszenstack/schema.zmodelzenstack-db-migrationjson
{
"scripts": {
"db:push": "zen db push",
"migrate:dev": "zen migrate dev",
"migrate:deploy": "zen migrate deploy"
}
}将现有 migration history 从 移动到 (ZenStack 的默认位置,与 相邻)。由于 ZenStack migrate 包装了 Prisma Migrate,它无需更改即可继续工作。有关完整的 migration 工作流,请参阅 skill。
prisma/migrationszenstack/migrationszenstack/schema.zmodelzenstack-db-migrationSpecial case — Prisma custom generators
特殊情况——Prisma 自定义生成器
If you depend on Prisma custom generators (e.g. zod, ERD, type generators) that read a
, keep emitting one with the plugin and chain the commands:
schema.prisma@core/prismazmodel
plugin prisma {
provider = '@core/prisma'
output = './schema.prisma'
}json
{ "scripts": { "generate": "zen generate && prisma generate --schema=zenstack/schema.prisma" } }如果你依赖读取 的 Prisma 自定义生成器(例如 zod、ERD、类型生成器),请继续使用 plugin 生成该文件,并串联命令:
schema.prisma@core/prismazmodel
plugin prisma {
provider = '@core/prisma'
output = './schema.prisma'
}json
{ "scripts": { "generate": "zen generate && prisma generate --schema=zenstack/schema.prisma" } }Mapping Prisma Client extensions
Prisma Client 扩展映射
| Prisma extension | ZenStack equivalent |
|---|---|
| Query extension (intercept calls) | A runtime plugin via |
| Result extension (computed fields) | |
| Prisma extension | ZenStack 对应功能 |
|---|---|
| Query extension(拦截调用) | 通过 |
| Result extension(计算字段) | ZModel 中的 |
After migrating
迁移完成后
Verify with: → typecheck → run your test suite / app. Then incrementally adopt
ZenStack's value-add features (access control, query builder escape hatch, auto CRUD APIs via
).
zen generatezenstack-crud-serverAlready on ZenStack V2? Start here (V2 was Prisma-based), then apply the V2→V3 deltas in(package renames, policy plugin,zenstack-project-setup/post-update, types+mixins, grouped hooks).before()
验证流程: → typecheck → 运行测试套件/应用。然后逐步采用 ZenStack 的增值功能(访问控制、query builder 逃生通道、通过 实现自动 CRUD API)。
zen generatezenstack-crud-server已经使用 ZenStack V2?请从这里开始(V2 基于 Prisma),然后应用中的 V2→V3 差异项(package 重命名、policy plugin、zenstack-project-setup/post-update、types+mixins、grouped hooks)。before()
Reference docs
参考文档
Full ZenStack documentation for this topic is bundled under :
references/- migrate-prisma.md — official "Migrating from Prisma" guide
本主题的完整 ZenStack 文档打包在 下:
references/- migrate-prisma.md — 官方 "Migrating from Prisma" 指南