DrizzleORM v0.29.2 发布
Dec 25, 2023
修复:
- 为 planescale 关系测试添加了改进 (#1579)
- 修复: 修正了空 PgArrays 的字符串转义 (#1640)
- 修复 SQLite 中 exists 函数的语法错误 (#1647)
- 正确处理 AWS Data API 中的日期
- 修复 Hermes mixins 构造函数问题
ESLint Drizzle 插件,v0.2.3
npm i eslint-plugin-drizzle@0.2.3
🎉 [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/next";
const expoDb = openDatabaseSync("db.db");
const db = drizzle(expoDb);
await db.select().from(...)...
// 或者
db.select().from(...).then(...);
// 或者
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;
创建 schema 文件和 drizzle.config.ts 文件后,您可以像这样生成迁移:
npx drizzle-kit generate
然后您需要在 App.tsx
文件中从 ./drizzle
文件夹导入 migrations.js
文件,并使用钩子 useMigrations
或 migrate
函数。
import { drizzle } from "drizzle-orm/expo-sqlite";
import { openDatabaseSync } from "expo-sqlite/next";
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>迁移错误: {error.message}</Text>
</View>
);
}
if (!success) {
return (
<View>
<Text>迁移进行中...</Text>
</View>
);
}
return ...您的应用组件;
}