1
/
5

#16 PythonにおけるORMは何がいい?(PyCon JP 2024)

ORM と向き合う

導入

ORMは中規模以上のアプリケーション開発において避けられない技術です。その主な理由は、リレーショナルデータモデルとオブジェクトデータモデル間の「インピーダンスミスマッチ」と呼ばれる本質的な差異にあります。この問題により、生のSQLを使用したアプリケーション開発は規模が大きくなるにつれて非効率になります。

ORMに期待される主な機能には、データ型変換、型サポート、コネクションプーリング、トランザクション処理などがあります。一方で、ドメインロジックとの融合や過度に直感的なインターフェースは必ずしも必要ではありません。

Pythonにおける主要なORM選択肢として、SQLAlchemy + AlembicとPrisma ORMが紹介されました。SQLAlchemyは定番で多機能ですが、FastAPIとの相性に課題があります。一方、Prisma ORMはPydanticとの統合が容易で、FastAPIとの相性が良いとされています。

インピーダンスミスマッチとは

オブジェクト指向プログラミングとリレーショナルデータベースは異なるデータモデルを持つ。リレーショナルデータベースの関係モデルは整合性を重視した2次元表の構造を持っており、データ同士は関係(リレーション)によって表現される。一方オブジェクト指向プログラミングのデータはひとまとまりのオブジェクトとして扱われ、関係モデルにおける関係と同じような構造を持つとすれば、オブジェクト指向としての恩恵が得られるモデル設計ができない。

SQLAlchemy + Alembicの簡単な使用例

まず、SQLAlchemyを使ってデータベースモデルを定義します。
例えば、Userテーブルを作成する場合

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String(50), nullable=False)

次に、Alembicを初期化し、マイグレーションスクリプトを生成します。

alembic init alembic
alembic revision --autogenerate -m "Create users table"

最後に、マイグレーションを実行してデータベースを更新します。

alembic upgrade head

これにより、モデルの変更を簡単にデータベースに反映できます。

Prisma ORMの簡単な使用例

まず、schema.prismaファイルでデータモデルを定義します。

model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User @relation(fields: [authorId], references: [id])
authorId Int
}

次に、Prisma Clientを使用してデータベース操作を行います。

import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()

async function main() {
const user = await prisma.user.create({
data: {
name: 'Alice',
email: 'alice@example.com',
},
})
console.log(user)
}

main()

このコードでは、新しいユーザーを作成し、結果を表示します。
Prisma ORMを使用することで、型安全性とコード補完が提供され、データベース操作が簡素化されます。

まとめ

ORMの使用にあたっては、その本質的な役割である「O/Rマッピング」に焦点を当てつつ、型サポートやDBマイグレーションなどの機能も重視すべきです。また、開発するアプリケーションの要件や使用するフレームワークとの相性を考慮してORMは選択しないといけません。

中規模以上のアプリケーション開発においてはORMの使用が不可避であり、その選択と使用方法を慎重に検討することが重要となるため、アプリケーションを開発する際には、しっかり検討しましょう。

If this story triggered your interest, why don't you come and visit us?
業績好調のため増員募集|経験豊富な代表直下で成長できるIT法人営業
ITEEK株式会社's job postings

Weekly ranking

Show other rankings
Like 上川 諒也's Story
Let 上川 諒也's company know you're interested in their content