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