ts
import { Model } from "kosame";
export class User extends Model {
static table = usersTable;
}いまのDrizzleプロジェクトのまま使える
すでに書いたスキーマにそのまま適用できます。自分のdbをcreateContextに渡すだけで、必要なときはcontext.rawから素のDrizzleに戻れます。
schema.ts変更なしdb.ts変更なしmodels/user.ts追加data/context.ts追加
書き込みの前に、Modelで止める
ModelでbeforeCreate、beforeUpdate、beforeDeleteをオーバーライドし、例外を投げれば書き込みを中断できます。トランザクション内では、結果が決まった後にafterCommit、afterRollbackが呼ばれます。
Hooksts
export class User extends Model {
static table = usersTable;
override async beforeCreate() {
if (!this.name.includes("kosame")) {
throw new Error("Name must contain kosame");
}
}
}- Drizzle
- Kosame
- Kosame(context.raw経由・2クエリ)
- Prisma
主キーで取得
主キーで取得 + include
1件insert
1件update
20件のルート + リレーション(ルートごとに1回呼ぶ)
素のDrizzleを1.0としたときの、1操作あたりの時間です。短いほど速い。Apple M3、Bun 1.3、PostgreSQL 17での1回の計測です。
- PostgreSQLnode-postgres
- MySQLmysql2
- SQLitebetter-sqlite3 / libsql
- Cloudflare D1未検証
