All posts

如何设置推荐的组合 (expo-sqlite + Drizzle ORM)

1\. 安装依赖 bash npx expo install exposqlite npm install drizzleorm npm install D @types/bettersqlite3 drizzlekit 2\. 定义数据库模式 schema.ts typescript // database/sche

1\. 安装依赖 bash npx expo install expo-sqlite npm install drizzle-orm npm install -D @types/better-sqlite3 drizzle-kit 2\. 定义数据库模式 (schema.ts) typescript // database/schema.ts import { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core'; // 定义一张表 export const todos = sqliteTable('todos', { id: integer('id').primaryKey({ autoIncrement: true }), text: text('text').notNull(), isCompleted: integer('iscompleted', { mode: 'boolean' }).notNull().default(false), createdAt: integer('createdat', { mode: 'timestamp' }).notNull().$defaultFn(() => new Date()), }); // 导出模式类型 export type InsertTodo = typeof todos.$inferInsert; export type SelectTodo = typeof todos.$inferSelect; 3\. 创建数据库连接和客户端 typescript // database/index.ts import { openDatabaseSync } from 'expo-sqlite'; import { drizzle } from 'drizzle-orm/expo-sqlite'; // 打开 Expo 的 SQLite 数据库 const expoDb = openDatabaseSync('myApp.db'); // 创建 Drizzle 客户端 export const db = drizzle(expoDb); 4\. 使用 Drizzle Kit 进行迁移和检查(可选但推荐) 在 package.json 中添加脚本: json { "scripts": { "generate": "drizzle-kit generate:sqlite --schema=./database/schema.ts --out=./database/migrations", "studio": "drizzle-kit studio --schema=./database/schema.ts" } } npm run generate:根据你的 schema.ts 生成 SQL 迁移文件。 npm run studio:启动 Drizzle Studio,一个强大的 GUI 来查看和编辑你的数据库。 5\. 在应用中进行数据库操作 typescript import { db } from './database'; import { todos, type InsertTodo } from './database/schema'; // 查询 const allTodos = await db.select().from(todos).all(); // 插入 const newTodo: InsertTodo = { text: 'Learn Drizzle ORM' }; const insertedTodo = await db.insert(todos).values(newTodo).returning().get(); // 更新 await db.update(todos) .set({ isCompleted: true }) .where(eq(todos.id, 1)) .run(); // 使用复杂查询 import { desc, eq, and, or } from 'drizzle-orm'; const importantTodos = await db.select() .from(todos) .where( or( eq(todos.isCompleted, false), eq(todos.text, '%urgent%') ) ) .orderBy(desc(todos.createdAt)) .all(); 总结 追求最佳类型安全、性能和现代开发体验:毫不犹豫地选择 Drizzle ORM。 构建具有复杂离线同步功能的大型应用:深入评估 WatermelonDB。 避免使用 TypeORM:它在 React Native 环境中的体验不佳。 除非万不得已,不要直接写裸 SQL:这会让代码变得难以维护。 对于绝大多数 Expo 开发者来说,expo-sqlite + Drizzle ORM 是当前技术栈下的黄金标准,能为你提供高效、可靠且愉快的开发体验。

Discussion

No comments yet