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-sqlitedrizzle-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 迁移,请更新 babel 和 metro 配置文件。

  1. 安装 babel-plugin-inline-import 包。
npm install babel-plugin-inline-import
  1. 更新 babel.config.jsmetro.config.js 文件。
babel.config.js
module.exports = function(api) {
  api.cache(true);

  return {
    presets: ['babel-preset-expo'],
+   plugins: [["inline-import", { "extensions": [".sql"] }]]
  };
};
metro.config.js
const { getDefaultConfig } = require('expo/metro-config');

/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname);

+config.resolver.sourceExts.push('sql');

module.exports = config;
  1. 在项目根目录中创建 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 文件中,并使用 useMigrationsmigrate 函数。

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>Migration error: {error.message}</Text>
            </View>
        );
    }

    if (!success) {
        return (
            <View>
                <Text>Migration is in progress...</Text>
            </View>
        );
    }

    return ...your application component;
}
Become a Gold Sponsor