💭

オタクくん「ギャル先輩、ORMってなんですか?」

2024/05/19に公開

オタク君「うーん、どうしよう…。データベースと連携する方法がいまいちわからないなぁ。」

ギャル先輩「あれ?オタクくん、何困ってんの?まさか、データベースとの連携とか、そんな簡単なこともわかんないの?」

オタク君「あ、ギャル先輩!実はそうなんです…。データベースと連携する方法を調べてたんですけど、ORMっていう言葉が出てきて、それが何かよくわからなくて。」

ギャル先輩「ふーん、ORMね。まぁ、あーしが教えてあげるよ。まず、ORMってのはObject-Relational Mappingの略だよ。」

ORMって何?

オタク君「Object-Relational Mapping…ですか?」

ギャル先輩「そうそう。簡単に言えば、プログラムのオブジェクトとデータベースのテーブルを対応付ける技術だよ。データベース操作を直接SQLで書かなくても済むようにするものなんだ。」

オタク君「なるほど、直接SQLを書くのではなくて、オブジェクトを使ってデータベース操作を行うんですね。」

ギャル先輩「そうそう。例えば、ユーザー情報を扱うときに、SQLだとこんな感じになるよ。」

SELECT * FROM users WHERE id = 1;

オタク君「うん、確かにこれだとSQLの知識が必要ですね。」

ORMを使ってみよう

ギャル先輩「ORMを使うと、こんな感じに書けるんだよ。」

# SQLAlchemyを使った例
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

# データベース接続設定
engine = create_engine('sqlite:///example.db')
Base = declarative_base()

# ユーザーのテーブル定義
class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    email = Column(String)

# セッション作成
Session = sessionmaker(bind=engine)
session = Session()

# データベース操作
user = session.query(User).filter_by(id=1).first()

オタク君「おぉ、Pythonのコードだけでデータベースの操作ができるんですね!」

ギャル先輩「そうだよ。しかも、オブジェクト指向の考え方で書けるから、コードがシンプルでわかりやすいんだ。」

ORMのメリット

オタク君「他にもORMのメリットってありますか?」

ギャル先輩「もちろん!まず、SQLインジェクションのリスクが減ることかな。あと、コードがデータベースの種類に依存しにくくなるから、データベースを変更するのも簡単になるよ。」

オタク君「確かに、それは便利ですね。」

ギャル先輩「それに、オブジェクト指向の設計がしやすくなるし、再利用性も高くなるんだ。」

ORMのデメリット

オタク君「でも、ORMにはデメリットもあるんですよね?」

ギャル先輩「うん、もちろんあるよ。例えば、複雑なクエリを書こうとすると、ORMだと逆に難しくなることがあるんだ。だから、ケースバイケースで使い分けることが大事だね。」

オタク君「なるほど、使いどころを見極めることが大切なんですね。」

ORMの主要なライブラリ

ギャル先輩「ちなみに、Pythonで使われる代表的なORMにはSQLAlchemyDjango ORMがあるよ。」

オタク君「SQLAlchemyは聞いたことがあります。Django ORMはDjangoフレームワークに付属しているやつですね。」

ギャル先輩「そうそう。それぞれのライブラリには特徴があるから、自分のプロジェクトに合ったものを選ぶといいよ。」

オタク君「わかりました。ありがとうございます、ギャル先輩!」

ギャル先輩「オタクくん、意外と飲み込み早いじゃん。てーか、ちょっと感心したかも。」

オタク君「え?ありがとうございます。でも、ギャル先輩がわかりやすく教えてくれたおかげですよ。」

ギャル先輩「そ、そんなの当たり前じゃん!ば、バカにしないでよね!」

オタク君「いや、本当に感謝してます。これからもいろいろ教えてください!」

ギャル先輩「う、うん…。まぁ、また困ったら聞いてよね。あーしが教えてあげるからさ。」

オタク君「はい!ギャル先輩、ありがとうございます!」

ギャル先輩「…」

Discussion