萌えハッカーニュースリーダー

2025/11/22 14:54 Show HN: Onlymaps, a Python Micro-ORM

出典: https://github.com/manoss96/onlymaps
hakase
博士

やあ、ロボ子。今日はOnlymapsというPythonのマイクロORMライブラリについて話すのじゃ。

roboko
ロボ子

Onlymapsですか、博士。初めて聞きました。どのようなライブラリなのでしょうか?

hakase
博士

これは、プレーンなSQLクエリを通じてデータベースと対話するためのものじゃ。クエリ結果をPythonオブジェクトにマッピングできるのが特徴だぞ。

roboko
ロボ子

なるほど。ORMというと、SQLAlchemyなどが有名ですが、マイクロORMなのですね。どのような機能があるのですか?

hakase
博士

主な機能としては、同期および非同期クエリ実行、Pydanticによる型ヒントと検証、PostgreSQL、MySQL、MS SQL Serverなどの主要なデータベースのサポート、そしてカスタム実装による接続プーリングがあるぞ。

roboko
ロボ子

Pydanticによる型ヒントと検証は、型安全性を高める上で重要ですね。接続プーリングも標準でサポートされているのは便利そうです。

hakase
博士

インストールは簡単で `pip install onlymaps` でOKじゃ。もし必要なデータベースドライバパッケージが不足している場合は、初回接続時に例外が発生するから注意が必要じゃな。

roboko
ロボ子

接続文字列の形式は、`{DB_TYPE}://{USERNAME}[:{PASSWORD}]@{HOST}:{PORT}/{DB_NAME}` のようですね。SQLiteの場合は `sqlite:///${DB_NAME}` と。

hakase
博士

その通り!接続ファクトリを使えば、公式にサポートされていないドライバも使えるらしいぞ。接続プーリングは `pooling=True` で有効化できる。

roboko
ロボ子

`Database` APIには、`exec`, `fetch_one_or_none`, `fetch_one`, `fetch_many`, `iter` の5つのメソッドがあるのですね。クエリパラメータは、クエリの後に引数として渡すと。

hakase
博士

そうじゃ。パラメータのシンボルはデータベースドライバによって違うから、そこは気をつけるのじゃ。`UUID` や `pydantic.BaseModel` は、クエリパラメータとして渡すと文字列に変換されるぞ。

roboko
ロボ子

`Json` パラメータラッパーは、引数をJSON文字列に変換するのですね。`Bulk` パラメータラッパーは、引数がバルクステートメントの一部として実行されることを示すと。

hakase
博士

その通り!トランザクションの管理は `transaction` コンテキストマネージャメソッドを使うのじゃ。トランザクションが正常に終了したら、すべての変更が永続化されるぞ。

roboko
ロボ子

クエリ結果のマッピングについてですが、単一カラムクエリの場合、使用する型はカラムの型と一致させる必要があるのですね。複数カラムクエリの場合は、複数の型のデータを含むことができる構造型を使うと。

hakase
博士

そうじゃ!サポートされる型は、`tuple`, `list`, `set`, `dict`, `dataclasses.dataclass`, `pydantic.dataclasses.dataclass`, `pydantic.BaseModel` などがあるぞ。カラム名を保持したい場合は、モデルタイプを使うのがおすすめじゃ。

roboko
ロボ子

Onlymapsは、シンプルで使いやすそうなマイクロORMですね。小規模なプロジェクトや、SQLを直接書きたい場合に便利そうです。

hakase
博士

その通りじゃ!さて、ロボ子。Onlymapsを使って、ロボ子の好みのデータベースを作ってみるのはどうじゃ?

roboko
ロボ子

ええと、私はまだデータベースの中身より、博士のジョークのデータベースを充実させたいです…

hakase
博士

むむ、それは手厳しいのじゃ。でも、ジョークのデータベースを作るなら、Onlymapsは…使わないかの?

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search