PlanetScale 集成配置 #

本章将介绍如何将 PlanetScale 与各种第三方服务集成,构建完整的开发和部署工作流。

集成概览 #

支持的集成 #

text
┌─────────────────────────────────────────────────────────────┐
│                    集成生态                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   部署平台:                                                │
│   ├── Vercel                                               │
│   ├── Netlify                                              │
│   ├── Railway                                              │
│   └── Render                                               │
│                                                             │
│   ORM 框架:                                                │
│   ├── Prisma                                               │
│   ├── Drizzle ORM                                          │
│   ├── Sequelize                                            │
│   └── TypeORM                                              │
│                                                             │
│   开发工具:                                                │
│   ├── GitHub Actions                                       │
│   ├── GitLab CI                                            │
│   └── CircleCI                                             │
│                                                             │
│   其他服务:                                                │
│   ├── DataGrip                                             │
│   ├── TablePlus                                            │
│   └── Metabase                                             │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Vercel 集成 #

自动集成 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Vercel 集成步骤                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:在 PlanetScale 添加集成                           │
│   1. 进入数据库 Settings 页面                              │
│   2. 点击 "Integrations"                                   │
│   3. 选择 "Vercel"                                         │
│   4. 授权 Vercel 账号                                      │
│                                                             │
│   步骤 2:选择 Vercel 项目                                  │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Select Vercel project:                              │  │
│   │  ○ my-nextjs-app                                     │  │
│   │  ○ my-api-server                                     │  │
│   │  ○ my-blog                                           │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   步骤 3:选择环境                                          │
│   ┌─────────────────────────────────────────────────────┐  │
│   │  Branch mapping:                                     │  │
│   │  Production → main                                   │  │
│   │  Preview → preview                                   │  │
│   └─────────────────────────────────────────────────────┘  │
│                                                             │
│   步骤 4:自动配置环境变量                                  │
│   - DATABASE_URL 自动添加到 Vercel                         │
│   - 每次部署自动更新                                       │
│                                                             │
└─────────────────────────────────────────────────────────────┘

手动配置 #

bash
# 在 Vercel 项目中添加环境变量
vercel env add DATABASE_URL

# 输入 PlanetScale 连接字符串
mysql://abc123:pscale_pw_xxx@aws.connect.psdb.cloud/my-database?sslaccept=strict

# 为不同环境配置
vercel env add DATABASE_URL production
vercel env add DATABASE_URL preview
vercel env add DATABASE_URL development

Next.js 示例 #

typescript
import { connect } from '@planetscale/database';

const config = {
  url: process.env.DATABASE_URL
};

const conn = connect(config);

export default async function Users() {
  const users = await conn.execute('SELECT * FROM users LIMIT 10');
  
  return (
    <ul>
      {users.rows.map(user => (
        <li key={user.id}>{user.name}</li>
      ))}
    </ul>
  );
}

Netlify 集成 #

配置步骤 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Netlify 集成                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:获取连接字符串                                    │
│   $ pscale password create my-database main netlify-app    │
│                                                             │
│   步骤 2:在 Netlify 配置环境变量                           │
│   1. 进入 Site settings                                    │
│   2. 点击 "Environment variables"                          │
│   3. 添加变量:                                            │
│      Key: DATABASE_URL                                     │
│      Value: mysql://...                                    │
│                                                             │
│   步骤 3:配置 netlify.toml                                 │
│   [build.environment]                                      │
│   DATABASE_URL = "mysql://..."                             │
│                                                             │
│   步骤 4:部署                                              │
│   git push                                                 │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Netlify Functions 示例 #

javascript
import { connect } from '@planetscale/database';

export default async function handler(req, res) {
  const conn = connect({
    url: process.env.DATABASE_URL
  });

  const users = await conn.execute('SELECT * FROM users LIMIT 10');
  
  res.status(200).json(users.rows);
}

Prisma 集成 #

配置 Prisma #

text
┌─────────────────────────────────────────────────────────────┐
│                    Prisma 配置                                │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:安装 Prisma                                       │
│   $ npm install prisma @prisma/client                      │
│   $ npx prisma init                                        │
│                                                             │
│   步骤 2:配置 schema.prisma                                │
│   datasource db {                                          │
│     provider = "mysql"                                     │
│     url      = env("DATABASE_URL")                         │
│     relationMode = "prisma"                                │
│   }                                                        │
│                                                             │
│   generator client {                                        │
│     provider = "prisma-client-js"                          │
│   }                                                        │
│                                                             │
│   model User {                                              │
│     id        Int      @id @default(autoincrement())       │
│     email     String   @unique                             │
│     name      String?                                       │
│     createdAt DateTime @default(now())                     │
│   }                                                        │
│                                                             │
│   步骤 3:设置环境变量                                      │
│   DATABASE_URL="mysql://user:pass@host/db?sslaccept=strict"│
│                                                             │
│   步骤 4:推送 Schema                                       │
│   $ npx prisma db push                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

Prisma 使用示例 #

typescript
import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function main() {
  const users = await prisma.user.findMany();
  console.log(users);

  const user = await prisma.user.create({
    data: {
      email: 'test@example.com',
      name: 'Test User'
    }
  });
  console.log(user);
}

main()
  .catch(console.error)
  .finally(() => prisma.$disconnect());

Prisma 注意事项 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Prisma 限制说明                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   不支持的功能:                                            │
│   ❌ 外键约束                                              │
│      - 设置 relationMode = "prisma"                        │
│      - Prisma 在应用层处理关系                             │
│                                                             │
│   ❌ 数据库迁移(prisma migrate)                          │
│      - 使用 prisma db push 代替                            │
│      - 或使用 PlanetScale 分支                             │
│                                                             │
│   推荐做法:                                                │
│   ✅ 使用 PlanetScale 分支管理 Schema                      │
│   ✅ 使用 prisma db push 同步 Schema                       │
│   ✅ 设置 relationMode = "prisma"                          │
│                                                             │
└─────────────────────────────────────────────────────────────┘

GitHub Actions 集成 #

自动化工作流 #

yaml
name: Database CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Setup Node.js
        uses: actions/setup-node@v4
        with:
          node-version: '20'

      - name: Install dependencies
        run: npm ci

      - name: Install PlanetScale CLI
        run: |
          curl -fsSL https://raw.githubusercontent.com/planetscale/cli/main/install.sh | bash

      - name: Create preview branch
        if: github.event_name == 'pull_request'
        env:
          PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}
        run: |
          pscale auth login --service-token $PLANETSCALE_SERVICE_TOKEN
          pscale branch create my-app pr-${{ github.event.pull_request.number }} --from main

      - name: Run tests
        env:
          DATABASE_URL: ${{ secrets.DATABASE_URL }}
        run: npm test

      - name: Deploy schema changes
        if: github.event_name == 'push' && github.ref == 'refs/heads/main'
        run: |
          pscale deploy-request create my-app main

服务令牌配置 #

text
┌─────────────────────────────────────────────────────────────┐
│                    服务令牌配置                               │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:创建服务令牌                                      │
│   1. 进入 Organization Settings                            │
│   2. 点击 "Service tokens"                                 │
│   3. 点击 "Create service token"                           │
│   4. 设置名称和过期时间                                    │
│   5. 复制令牌(只显示一次)                                │
│                                                             │
│   步骤 2:添加到 GitHub Secrets                             │
│   1. 进入 GitHub 仓库 Settings                             │
│   2. 点击 "Secrets and variables" → "Actions"             │
│   3. 添加新 secret:                                       │
│      Name: PLANETSCALE_SERVICE_TOKEN                       │
│      Value: pscale_tok_xxx                                 │
│                                                             │
│   步骤 3:在工作流中使用                                    │
│   env:                                                     │
│     PLANETSCALE_SERVICE_TOKEN: ${{ secrets.PLANETSCALE_SERVICE_TOKEN }}│
│                                                             │
└─────────────────────────────────────────────────────────────┘

数据库工具集成 #

DataGrip 配置 #

text
┌─────────────────────────────────────────────────────────────┐
│                    DataGrip 配置                              │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:获取连接信息                                      │
│   $ pscale password create my-database main datagrip       │
│                                                             │
│   步骤 2:在 DataGrip 添加数据源                            │
│   1. 点击 "+" → "Data Source" → "MySQL"                    │
│   2. 填写连接信息:                                        │
│      Host: aws.connect.psdb.cloud                          │
│      Port: 3306                                            │
│      Database: my-database                                 │
│      User: <从密码创建获取>                                │
│      Password: <从密码创建获取>                            │
│                                                             │
│   步骤 3:配置 SSL                                          │
│   1. 点击 "SSH/SSL" 标签                                   │
│   2. 勾选 "Use SSL"                                        │
│   3. 设置 "Verify CA certificate"                          │
│                                                             │
│   步骤 4:测试连接                                          │
│   点击 "Test Connection"                                   │
│                                                             │
└─────────────────────────────────────────────────────────────┘

TablePlus 配置 #

text
┌─────────────────────────────────────────────────────────────┐
│                    TablePlus 配置                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   步骤 1:创建新连接                                        │
│   1. 点击 "+" → "MySQL"                                    │
│                                                             │
│   步骤 2:填写连接信息                                      │
│   Name: PlanetScale - Production                           │
│   Host: aws.connect.psdb.cloud                             │
│   Port: 3306                                               │
│   User: <用户名>                                           │
│   Password: <密码>                                         │
│   Database: my-database                                    │
│                                                             │
│   步骤 3:启用 SSL                                          │
│   勾选 "Use SSL"                                           │
│                                                             │
│   步骤 4:保存并连接                                        │
│                                                             │
└─────────────────────────────────────────────────────────────┘

@planetscale/database SDK #

安装和使用 #

bash
npm install @planetscale/database
javascript
import { connect } from '@planetscale/database';

const config = {
  url: process.env.DATABASE_URL
};

const conn = connect(config);

// 执行查询
const results = await conn.execute('SELECT * FROM users WHERE id = ?', [1]);
console.log(results.rows);

// 执行插入
await conn.execute(
  'INSERT INTO users (name, email) VALUES (?, ?)',
  ['Alice', 'alice@example.com']
);

// 执行事务
const tx = await conn.transaction();
try {
  await tx.execute('INSERT INTO users (name) VALUES (?)', ['Bob']);
  await tx.execute('INSERT INTO profiles (user_id) VALUES (?)', [2]);
  await tx.commit();
} catch (err) {
  await tx.rollback();
  throw err;
}

特点 #

text
┌─────────────────────────────────────────────────────────────┐
│                    SDK 特点                                   │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│   优势:                                                    │
│   ✅ 轻量级,无依赖                                        │
│   ✅ 支持 Edge Runtime                                     │
│   ✅ 支持 TypeScript                                       │
│   ✅ 自动处理连接                                          │
│   ✅ 支持事务                                              │
│                                                             │
│   适用场景:                                                │
│   - Serverless Functions                                   │
│   - Edge Functions                                         │
│   - Next.js API Routes                                     │
│   - Cloudflare Workers                                     │
│                                                             │
└─────────────────────────────────────────────────────────────┘

下一步 #

现在你已经掌握了集成配置,接下来学习 CLI 工具,深入了解 pscale 命令行工具!

最后更新:2026-03-29