我一直在为我的无服务器后端设置一个使用 Drizzle + Next.js + Vercel 的项目。 我想使用 Drizzle 的 ORM api,因此我像这样引用我的数据库:
import { drizzle } from "drizzle-orm/vercel-postgres";
import { sql } from "@vercel/postgres";
import { users } from "./schema";
import * as schema from "./schema";
export const db = drizzle(sql, { schema });
我注意到您需要传递 {schema} 作为参数来推断打字稿的类型并使用您在模式中定义的 ORM 关系。
但后来我注意到 drizzle-kit 提供了一个 drizzle.config.ts 文件,它也引用了您的架构,如下所示:
import "@/lib/config";
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./lib/schema.ts",
out: "./drizzle",
driver: "pg",
dbCredentials: {
connectionString: process.env.POSTGRES_URL,
},
verbose: true,
strict: true,
});
很自然地,我认为我不需要“drizzle(sql, { schema });”的第二个可选部分如果我使用 drizzle-kit 但情况似乎并非如此。
Drizzle 文档指定:
Drizzle Kit lets you split your schema in different files and even have multiple schemas for different databases in one project. You can rapidly prototype database schema and push it directly to the database.
那么为什么我需要重新定义我的架构位置两次?我的 drizzle.config.ts 文件的用途是什么?
非常感谢
我尝试将配置对象直接传递给 drizzle,如下所示:
import { sql } from "@vercel/postgres";
import { drizzle } from "drizzle-orm/vercel-postgres";
import {config} from "@/drizzle.config";
// import dotenv from 'dotenv'
// dotenv.config({ path: '.env.local' })
// use dotenv or this custom next js script to load .env.local variables in process.env for Node.js backend
import { loadEnvConfig } from "@next/env";
const projectDir = process.cwd();
loadEnvConfig(projectDir);
export const db = drizzle(sql, config);
或者像这样:
import { sql } from "@vercel/postgres";
import { drizzle } from "drizzle-orm/vercel-postgres";
import {config} from "@/drizzle.config";
// import dotenv from 'dotenv'
// dotenv.config({ path: '.env.local' })
// use dotenv or this custom next js script to load .env.local variables in process.env for Node.js backend
import { loadEnvConfig } from "@next/env";
const projectDir = process.cwd();
loadEnvConfig(projectDir);
export const db = drizzle(sql, {schema: config.schema});
但这没有用