跳转到内容

Prisma Postgres 与 Astro

Prisma Postgres 是专为现代 Web 应用构建的完全托管、无服务器的 Postgres 数据库。

使用 Prisma ORM 连接(推荐)

推荐使用 Prisma ORM 连接你的 Prisma Postgres 数据库。它提供类型安全查询、迁移和全局性能优化。

前提条件

安装依赖并初始化 Prisma

运行以下命令安装所需的 Prisma 依赖项:

npm install prisma tsx --save-dev 
npm install @prisma/adapter-pg @prisma/client

安装完成后,使用以下命令在项目中初始化 Prisma:

npx prisma init --db --output ./generated

设置 Prisma Postgres 数据库时,你需要回答几个问题。选择离你位置最近的区域,并为数据库取一个容易记住的名称,例如“我的 Astro 项目”。

这将创建:

  • 一个包含 schema.prisma 文件的 prisma/ 目录
  • 一个已设置好 DATABASE_URL.env 文件

定义模型

即使你还不需要任何特定的数据模型,Prisma 仍要求在模式中至少定义一个模型,以便生成客户端并应用迁移。

以下示例将 Post 模型定义为占位符。将此模型添加到你的架构中即可开始使用。之后你可以放心地删除或用反映你实际数据的模型替换它。

generator client {
  provider = "prisma-client"
  output   = "./generated"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  content   String?
  published Boolean @default(false)
}

Prisma schema 参考文档中了解更多关于配置 Prisma ORM 设置的信息。

生成客户端

运行以下命令以从你的 schema 生成 Prisma 客户端:

npx prisma generate

生成迁移文件

运行以下命令创建数据库表并根据你的模式创建 Prisma 客户端。这还将创建包含迁移历史记录文件的 prisma/migrations/ 目录。

npx prisma migrate dev --name init

创建 Prisma 客户端

/src/lib 目录中,创建一个 prisma.ts 文件。该文件将初始化并导出你的 Prisma 客户端实例,以便你可以在整个 Astro 项目中查询数据库。

import { PrismaPg } from '@prisma/adapter-pg';
import { PrismaClient } from '../../prisma/generated/client';

const connectionString = import.meta.env.DATABASE_URL;
const adapter = new PrismaPg({ connectionString });
const prisma = new PrismaClient({ adapter });

export default prisma;

查询和显示数据

以下示例展示了如何使用 Prisma 客户端仅按 id 排序获取已发布的帖子,并在 Astro 模板中显示标题和帖子内容:

---
import prisma from '../lib/prisma';

const posts = await prisma.post.findMany({
  where: { published: true },
  orderBy: { id: 'desc' }
});
---

<html>
  <head>
    <title>Published Posts</title>
  </head>
  <body>
    <h1>Published Posts</h1>
    <ul>
      {posts.map((post) => (
        <li>
          <h2>{post.title}</h2>
          {post.content && <p>{post.content}</p>}
        </li>
      ))}
    </ul>
  </body>
</html>

最好的做法是在 API 路由中处理查询。有关如何在 Astro 项目中使用 Prisma ORM 的更多信息,请参考 Astro + Prisma ORM 指南

连接其他 ORM 或库

你可以使用任何其他 ORM、数据库库或你选择的工具通过直接 TCP 连接到 Prisma Postgres。在 Prisma 控制台中创建一个直接连接字符串以开始使用。

前提条件

安装依赖包

本示例将使用 pg(一个 Node.js 的 PostgreSQL 客户端)来建立直接 TCP 连接。

运行以下命令来安装 pg 包:

npm install pg

查询数据库客户端

将连接字符串提供给 pg 客户端,以便与 SQL 服务器通信并从数据库中获取数据。

以下创建表和插入的数据示例可用于验证你的查询 URL 和 TCP 连接:

---
import { Client } from 'pg';
const client = new Client({ 
  connectionString: import.meta.env.DATABASE_URL,
  ssl: { rejectUnauthorized: false }
});
await client.connect();

await client.query(`
  CREATE TABLE IF NOT EXISTS posts (
    id SERIAL PRIMARY KEY,
    title TEXT UNIQUE,
    content TEXT
  );
  
  INSERT INTO posts (title, content)
  VALUES ('Hello', 'World')
  ON CONFLICT (title) DO NOTHING;
`);

const { rows } = await client.query('SELECT * FROM posts');
await client.end();
---

<h1>Posts</h1>
<p>{rows[0].title}: {rows[0].content}</p>

官方资源

更多后端服务指南

贡献 社区 赞助