Astro DB: Database สำหรับ Astro Projects
#astro12 เม.ย. 2569
Astro DB คืออะไร
Astro DB เป็น fully-managed SQL database ที่ออกแบบมาสำหรับ Astro projects โดยเฉพาะ ใช้ LibSQL (SQLite) เป็น engine
ติดตั้ง
npx astro add db
กำหนด Schema
// db/config.ts
import { defineDb, defineTable, column } from 'astro:db';
const Post = defineTable({
columns: {
id: column.number({ primaryKey: true }),
title: column.text(),
content: column.text(),
publishedAt: column.date(),
authorId: column.number({ references: () => User.columns.id })
}
});
const User = defineTable({
columns: {
id: column.number({ primaryKey: true }),
name: column.text(),
email: column.text({ unique: true })
}
});
export default defineDb({
tables: { Post, User }
});
Seed Data
// db/seed.ts
import { db, Post, User } from 'astro:db';
export default async function() {
await db.insert(User).values([
{ id: 1, name: 'สมชาย', email: 'somchai@example.com' }
]);
await db.insert(Post).values([
{
id: 1,
title: 'บทความแรก',
content: 'เนื้อหา...',
publishedAt: new Date(),
authorId: 1
}
]);
}
Query
---
import { db, Post, User, eq } from 'astro:db';
// SELECT ทั้งหมด
const posts = await db.select().from(Post);
// WHERE
const post = await db.select()
.from(Post)
.where(eq(Post.id, 1))
.get();
// JOIN
const postsWithAuthor = await db.select()
.from(Post)
.innerJoin(User, eq(Post.authorId, User.id));
---
{posts.map(post => <h2>{post.title}</h2>)}
Insert, Update, Delete
// Insert
await db.insert(Post).values({ title: 'ใหม่', content: '...' });
// Update
await db.update(Post)
.set({ title: 'แก้ไขแล้ว' })
.where(eq(Post.id, 1));
// Delete
await db.delete(Post).where(eq(Post.id, 1));
Local Development
npm run dev # ใช้ local SQLite
สรุป
Astro DB ทำให้เพิ่ม database เข้า Astro project ได้ง่ายมาก มี type safety เต็มรูปแบบ เหมาะกับ small-medium projects ครับ