DrizzleORM v0.29.2 发布
Dec 25, 2023
修复:
-
改进了平面尺度关系测试 (#1579)
-
FIX:正确处理空 PgArrays 的字符串转义(#1640)
-
修复 sqlite 中 exist fn 的错误语法 (#1647)
-
正确处理 AWS Data API 中的日期
-
修复 Hermes 混合构造函数问题
ESLint Drizzle 插件,v0.2.3
npm i eslint-plugin-drizzle@0.2.3
🎉 [ESLint] 添加对函数的支持并改进错误消息
-
允许 Drizzle 对象被函数获取或从函数中检索,例如:
-
为错误消息中的建议添加了更好的上下文。
更多信息,你可以查看 docs
新驱动程序
🎉 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 Migrations,则需要更新 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;
创建模式文件和 drizzle.config.ts 文件后,你可以像这样生成迁移:
npx drizzle-kit generate
然后,你需要从 ./drizzle
文件夹将 migrations.js
文件导入到你的 App.tsx
文件中,并使用钩子 useMigrations
或 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;
}