DrizzleORM v0.29.2 发布
2023年12月25日
修复:
- 改进了 planescale 关系测试 (#1579)
- 修复:修正空 PgArrays 的字符串转义 (#1640)
- 修复 sqlite 中 exists 函数的错误语法 (#1647)
- 正确处理 AWS Data API 中的日期
- 修复 Hermes mixins 构造函数问题
ESLint Drizzle 插件,v0.2.3
npm i [email protected]
🎉 [ESLint] 添加对函数的支持并改进错误消息
- 允许 Drizzle 对象是函数或从函数中检索,例如:
- 在错误消息中为建议添加了更好的上下文。
更多信息请查看文档
新驱动
🎉 Expo SQLite 驱动已可用
要开始使用 Expo SQLite 驱动,您需要安装 expo-sqlite
和 drizzle-orm
包。
npm install drizzle-orm expo-sqlite@next
然后,您可以这样使用它
import { drizzle } from "drizzle-orm/expo-sqlite";
import { openDatabaseSync } from "expo-sqlite";
const expoDb = openDatabaseSync("db.db");
const db = drizzle(expoDb);
await db.select().from(...)...
// or
db.select().from(...).then(...);
// or
db.select().from(...).all();
如果您想使用 Drizzle 迁移,需要更新 babel 和 metro 配置文件。
- 安装
babel-plugin-inline-import
包。
npm install babel-plugin-inline-import
- 更新
babel.config.js
和metro.config.js
文件。
module.exports = function(api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
+ plugins: [["inline-import", { "extensions": [".sql"] }]]
};
};
const { getDefaultConfig } = require('expo/metro-config');
/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname);
+config.resolver.sourceExts.push('sql');
module.exports = config;
- 在您的项目根文件夹中创建
drizzle.config.ts
文件。
import type { Config } from 'drizzle-kit';
export default {
schema: './db/schema.ts',
out: './drizzle',
dialect: 'sqlite',
driver: 'expo',
} satisfies Config;
创建 schema 文件和 drizzle.config.ts 文件后,您可以这样生成迁移:
npx drizzle-kit generate
然后,您需要从 ./drizzle
文件夹中导入 migrations.js
文件到您的 App.tsx
文件中,并使用 useMigrations
hook 或 migrate
函数。
import { drizzle } from "drizzle-orm/expo-sqlite";
import { openDatabaseSync } from "expo-sqlite";
import { useMigrations } from 'drizzle-orm/expo-sqlite/migrator';
import migrations from './drizzle/migrations';
const expoDb = openDatabaseSync("db.db");
const db = drizzle(expoDb);
export default function App() {
const { success, error } = useMigrations(db, migrations);
if (error) {
return (
<View>
<Text>Migration error: {error.message}</Text>
</View>
);
}
if (!success) {
return (
<View>
<Text>Migration is in progress...</Text>
</View>
);
}
return ...your application component;
}