[{"data":1,"prerenderedAt":403},["ShallowReactive",2],{"page-/post/nuxt/orm/from-prisma-to-dizzle":3,"surrounding-page":394},{"id":4,"title":5,"author":6,"body":7,"date":382,"description":383,"extension":384,"group":6,"lastmod":385,"meta":386,"navigation":182,"path":387,"rawbody":388,"seo":389,"showTitle":6,"stem":390,"tags":391,"versions":6,"__hash__":393},"content/post/nuxt/orm/from-prisma-to-dizzle.md","Prisma 迁移到 Dizzle 后的基线问题",null,{"type":8,"value":9,"toc":380},"minimark",[10,22,39,51,54,57,79,94,100,117,124,138,155,165,170,253,260,263,270,282,285,288,334,337,348,355,358,368,373,376],[11,12,13,14,18,19],"p",{},"把 ",[15,16,17],"code",{},"prisma"," 迁移到了 ",[15,20,21],{},"dizzle",[11,23,24,25,27,28,31,32,35,36,38],{},"由于 ",[15,26,21],{}," 的 ",[15,29,30],{},"schema"," 是直接让 ",[15,33,34],{},"AI"," 生成的，完全没看 ",[15,37,21],{}," 的官方文档",[11,40,41,42,45,46,50],{},"然后也遇到了已有项目迁移到 ",[15,43,44],{},"Prisma"," 一样的问题：",[47,48,49],"strong",{},"设置基线","。",[11,52,53],{},"Dizzle 也是用一个 migrations 文件夹来管理所有迁移。",[11,55,56],{},"初次生成时",[58,59,64],"pre",{"className":60,"code":61,"language":62,"meta":63,"style":63},"language-shell shiki shiki-themes github-light","drizzle-kit generate\n","shell","",[15,65,66],{"__ignoreMap":63},[67,68,71,75],"span",{"class":69,"line":70},"line",1,[67,72,74],{"class":73},"s7eDp","drizzle-kit",[67,76,78],{"class":77},"sYBdl"," generate\n",[11,80,81,82,85,86,89,90,93],{},"生成的 ",[15,83,84],{},"sql"," 都是 ",[15,87,88],{},"CREATE TABLE"," ，这显然不应该在执行 ",[15,91,92],{},"migrate"," 命令时应用",[11,95,96],{},[97,98,99],"em",{},"dizzle 的 migrate 和 prisma 的 deploy 是一样的，就是把变更应用到当前数据库的意思",[11,101,102,103,105,106,113,114,116],{},"因为有 ",[15,104,17],{}," 的",[107,108,112],"a",{"href":109,"rel":110},"https://zzao.club/post/nest/nest-from-typeorm-to-prisma",[111],"nofollow","迁移经验","了，所以也能大概猜到 ",[15,115,21],{}," 也有类似设置基线的方式",[11,118,119,120,123],{},"于是问了一下 ",[15,121,122],{},"Kimi"," 就得到了答案",[11,125,126,127,130,131,134,135,137],{},"在 ",[15,128,129],{},"generate"," 命令之后，得到了一个 ",[15,132,133],{},"migrations"," 文件夹，以及一个 ",[15,136,84],{}," 文件",[58,139,142],{"className":60,"code":140,"filename":141,"language":62,"meta":63,"style":63},"CREATE TABLE xxxx\n","dizzle/migrations/0000000000_xxxx_xxx.sql",[15,143,144],{"__ignoreMap":63},[67,145,146,149,152],{"class":69,"line":70},[67,147,148],{"class":73},"CREATE",[67,150,151],{"class":77}," TABLE",[67,153,154],{"class":77}," xxxx\n",[11,156,157,158,161,162],{},"拿到这个文件的 ",[15,159,160],{},"hash"," 部分，也就是：",[15,163,164],{},"0000000000_xxxx_xxx",[11,166,167,168],{},"在配置文件中配置好 ",[15,169,133],{},[58,171,176],{"className":172,"code":173,"filename":174,"language":175,"meta":63,"style":63},"language-typescript shiki shiki-themes github-light","\nexport default defineConfig({\n  migrations: {\n    prefix: 'timestamp',\n    table: '__drizzle_migrations__',\n    schema: 'public',\n  },\n})\n","dizzle.config.ts","typescript",[15,177,178,184,201,207,219,230,241,247],{"__ignoreMap":63},[67,179,180],{"class":69,"line":70},[67,181,183],{"emptyLinePlaceholder":182},true,"\n",[67,185,187,191,194,197],{"class":69,"line":186},2,[67,188,190],{"class":189},"sD7c4","export",[67,192,193],{"class":189}," default",[67,195,196],{"class":73}," defineConfig",[67,198,200],{"class":199},"sgsFI","({\n",[67,202,204],{"class":69,"line":203},3,[67,205,206],{"class":199},"  migrations: {\n",[67,208,210,213,216],{"class":69,"line":209},4,[67,211,212],{"class":199},"    prefix: ",[67,214,215],{"class":77},"'timestamp'",[67,217,218],{"class":199},",\n",[67,220,222,225,228],{"class":69,"line":221},5,[67,223,224],{"class":199},"    table: ",[67,226,227],{"class":77},"'__drizzle_migrations__'",[67,229,218],{"class":199},[67,231,233,236,239],{"class":69,"line":232},6,[67,234,235],{"class":199},"    schema: ",[67,237,238],{"class":77},"'public'",[67,240,218],{"class":199},[67,242,244],{"class":69,"line":243},7,[67,245,246],{"class":199},"  },\n",[67,248,250],{"class":69,"line":249},8,[67,251,252],{"class":199},"})\n",[11,254,255,256,259],{},"一开始我配错了，配成了 ",[15,257,258],{},"__drizzle_migrations"," ，实测好像他不认这个表名，当然更可能是我不知道参数，但是我懒得去找了。",[11,261,262],{},"登录自己的服务器",[11,264,265,266,269],{},"进入数据库，如果你还没有 ",[47,267,268],{},"drizzle_migrations"," 这个表，可以先跑一下",[58,271,273],{"className":60,"code":272,"language":62,"meta":63,"style":63},"drizzle-kit migrate\n",[15,274,275],{"__ignoreMap":63},[67,276,277,279],{"class":69,"line":70},[67,278,74],{"class":73},[67,280,281],{"class":77}," migrate\n",[11,283,284],{},"它会报错，但是没关系，只要帮咱创建好了表就行",[11,286,287],{},"然后手动插入一条记录",[58,289,292],{"className":290,"code":291,"language":84,"meta":63,"style":63},"language-sql shiki shiki-themes github-light","INSERT INTO __drizzle_migrations__ (hash, created_at)\nVALUES ('0000000000_xxxx_xxx', NOW(6));\n",[15,293,294,307],{"__ignoreMap":63},[67,295,296,299,302,304],{"class":69,"line":70},[67,297,298],{"class":189},"INSERT INTO",[67,300,301],{"class":199}," __drizzle_migrations__ (",[67,303,160],{"class":189},[67,305,306],{"class":199},", created_at)\n",[67,308,309,312,315,318,321,324,327,331],{"class":69,"line":186},[67,310,311],{"class":189},"VALUES",[67,313,314],{"class":199}," (",[67,316,317],{"class":77},"'0000000000_xxxx_xxx'",[67,319,320],{"class":199},", ",[67,322,323],{"class":189},"NOW",[67,325,326],{"class":199},"(",[67,328,330],{"class":329},"sYu0t","6",[67,332,333],{"class":199},"));\n",[11,335,336],{},"此时再去部署自己的项目时，就不会执行初始化生成的那个 sql 了，因为我们已经手动标记它已经被执行过了。",[11,338,339,340,343,344,347],{},"⚠️",[47,341,342],{},"插入的这条记录注意一下","，要和 ",[15,345,346],{},"_journal.json"," 里的值保持一致，不然后续的 migrations 都不会被执行",[11,349,350,354],{},[351,352],"img",{"alt":63,"src":353},"https://img.zzao.club/article/202508201440546.png","\n至此结束",[356,357],"hr",{},[11,359,360,361,364,365,367],{},"你别说 ",[15,362,363],{},"kimi"," 给的这种方式比以前迁移 ",[15,366,17],{}," 更直接，更好理解了。",[11,369,370,372],{},[15,371,17],{}," 的各种命令反而更绕～",[11,374,375],{},"周末愉快 🚀",[377,378,379],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html pre.shiki code .sgsFI, html code.shiki .sgsFI{--shiki-default:#24292E}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}",{"title":63,"searchDepth":186,"depth":186,"links":381},[],"2025-08-15T00:00:00.000Z","把 prisma 迁移到了 dizzle","md","2025-08-20T00:00:00.000Z",{},"/post/nuxt/orm/from-prisma-to-dizzle","---\ntitle: Prisma 迁移到 Dizzle 后的基线问题\ndate: 2025-08-15\nlastmod: 2025-08-20\ntags: [\"Node\"]\n\n---\n把 `prisma` 迁移到了 `dizzle` \n\n由于 `dizzle` 的 `schema` 是直接让 `AI` 生成的，完全没看 `dizzle` 的官方文档\n\n然后也遇到了已有项目迁移到 `Prisma` 一样的问题：**设置基线**。\n\nDizzle 也是用一个 migrations 文件夹来管理所有迁移。\n\n初次生成时\n\n```shell\ndrizzle-kit generate\n```\n\n生成的 `sql` 都是 `CREATE TABLE` ，这显然不应该在执行 `migrate` 命令时应用\n\n_dizzle 的 migrate 和 prisma 的 deploy 是一样的，就是把变更应用到当前数据库的意思_\n\n因为有 `prisma` 的[迁移经验](https://zzao.club/post/nest/nest-from-typeorm-to-prisma)了，所以也能大概猜到 `dizzle` 也有类似设置基线的方式\n\n于是问了一下 `Kimi` 就得到了答案\n\n在 `generate` 命令之后，得到了一个 `migrations` 文件夹，以及一个 `sql` 文件\n\n```shell [dizzle/migrations/0000000000_xxxx_xxx.sql]\nCREATE TABLE xxxx\n```\n\n拿到这个文件的 `hash` 部分，也就是：`0000000000_xxxx_xxx`\n\n在配置文件中配置好 `migrations`\n\n```typescript [dizzle.config.ts]\n\nexport default defineConfig({\n  migrations: {\n    prefix: 'timestamp',\n    table: '__drizzle_migrations__',\n    schema: 'public',\n  },\n})\n```\n\n一开始我配错了，配成了 `__drizzle_migrations` ，实测好像他不认这个表名，当然更可能是我不知道参数，但是我懒得去找了。\n\n登录自己的服务器\n\n进入数据库，如果你还没有 __drizzle_migrations__ 这个表，可以先跑一下 \n\n```shell\ndrizzle-kit migrate\n```\n\n它会报错，但是没关系，只要帮咱创建好了表就行\n\n然后手动插入一条记录\n\n```sql\nINSERT INTO __drizzle_migrations__ (hash, created_at)\nVALUES ('0000000000_xxxx_xxx', NOW(6));\n```\n\n此时再去部署自己的项目时，就不会执行初始化生成的那个 sql 了，因为我们已经手动标记它已经被执行过了。\n\n⚠️**插入的这条记录注意一下**，要和 `_journal.json` 里的值保持一致，不然后续的 migrations 都不会被执行\n\n![](https://img.zzao.club/article/202508201440546.png)\n至此结束\n\n---\n\n你别说 `kimi` 给的这种方式比以前迁移 `prisma` 更直接，更好理解了。\n\n`prisma` 的各种命令反而更绕～\n\n周末愉快 🚀",{"title":5,"description":383},"post/nuxt/orm/from-prisma-to-dizzle",[392],"Node","rkoKU8Xh53lVnhyrs7REVsWg8OxHptTBCXVhC7wxL8I",[395,399],{"title":396,"path":397,"stem":398},"OpenClaw 安装入门（Windows）","/post/zzao/openclaw/openclaw-install-windows","post/zzao/openclaw/openclaw-install-windows",{"title":400,"path":401,"stem":402},"假设你是AI，你的Skill应该是什么样的","/post/zzao/ai-skill-structure","post/zzao/ai-skill-structure",1779005085631]