Prisma Postgres 与 Astro
Prisma Postgres 是专为现代 Web 应用构建的完全托管、无服务器的 Postgres 数据库。
通过 Prisma ORM 连接(推荐)
Section titled “通过 Prisma ORM 连接(推荐)”推荐使用 Prisma ORM 连接你的 Prisma Postgres 数据库。它提供类型安全查询、迁移和全局性能优化。
- 一个已安装适配器并支持 按需渲染(SSR)的 Astro 项目。
安装依赖并初始化 Prisma
Section titled “安装依赖并初始化 Prisma”运行以下命令安装所需的 Prisma 依赖项:
npm install prisma tsx --save-devnpm install @prisma/extension-accelerate @prisma/client安装完成后,使用以下命令在项目中初始化 Prisma:
npx prisma init --db --output ../src/generated/prisma设置 Prisma Postgres 数据库时,你需要回答几个问题。选择离你位置最近的区域,并为数据库取一个容易记住的名称,例如“我的 Astro 项目”。
这将创建:
- 一个包含 schema.prisma文件的prisma/目录
- 一个已设置好 DATABASE_URL的.env文件
即使你还不需要任何特定的数据模型,Prisma 仍要求在模式中至少定义一个模型,以便生成客户端并应用迁移。
以下示例将 Post 模型定义为占位符。将此模型添加到你的架构中即可开始使用。之后你可以放心地删除或用反映你实际数据的模型替换它。
在你的 prisma/schema.prisma 文件中,将生成器提供程序从 prisma-client-js 更新为 prisma-client:
generator client {  provider = "prisma-client"  output   = "../src/generated/prisma"}
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 设置的信息。
生成迁移文件
Section titled “生成迁移文件”运行以下命令创建数据库表并根据你的模式创建 Prisma 客户端。这还将创建包含迁移历史记录文件的 prisma/migrations/ 目录。
npx prisma migrate dev --name init创建 Prisma 客户端
Section titled “创建 Prisma 客户端”在 /src/lib 目录中,创建一个 prisma.ts 文件。该文件将初始化并导出你的 Prisma 客户端实例,以便你可以在整个 Astro 项目中查询数据库。
import { PrismaClient } from "../generated/prisma/client";import { withAccelerate } from "@prisma/extension-accelerate";
const prisma = new PrismaClient({  datasourceUrl: import.meta.env.DATABASE_URL,}).$extends(withAccelerate());
export default prisma;查询和显示数据
Section titled “查询和显示数据”以下示例展示了如何使用 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 指南。
直接 TCP 连接
Section titled “直接 TCP 连接”要通过直接 TCP 连接到 Prisma Postgres,你可以在 Prisma 控制台中创建一个直接连接字符串。这样你就能连接任意其他 ORM、数据库库或你选择的工具。
- 一个已启用 TCP 连接字符串的 Prisma Postgres 数据库
本示例将使用 pg(一个 Node.js 的 PostgreSQL 客户端)来建立直接 TCP 连接。
运行以下命令来安装 pg 包:
npm install pg查询数据库客户端
Section titled “查询数据库客户端”将连接字符串提供给 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> 
			
