Python

【Python】第8章第6回:データベースとORM(SQLAlchemyなど)

本記事では、Pythonでデータベース操作を簡単に行うためのORM(Object Relational Mapping)と、SQLAlchemyの基本的な使い方について解説します。

0. 記事の概要

この記事を読むメリット

  • データベース操作の基本を習得:SQLの知識がなくてもデータベース操作が可能になります。
  • Pythonでの効率的なデータ管理:ORMを使った柔軟なデータベース操作を学べます。
  • 実務に役立つスキル:Webアプリケーション開発で活用可能なデータ管理方法を習得できます。

この記事で学べること

  • データベースとORMの基本的な仕組み
  • SQLAlchemyのインストールと基本操作
  • Pythonコードでデータベースを操作する方法

1. データベースとORMの基礎

1.1 データベースとは

データベースは、データを効率的に管理・保存するためのシステムです。主な種類は以下の通りです。

  • リレーショナルデータベース: SQLを使って操作する。例: MySQL、PostgreSQL
  • NoSQLデータベース: 非構造化データを扱う。例: MongoDB、Redis

1.2 ORMとは

ORMは、オブジェクトとリレーショナルデータベースの間の変換を行うツールです。PythonではSQLAlchemyやDjango ORMが代表的です。以下の利点があります。

  • SQLの記述を最小限に抑えられる
  • データベース操作をコードで表現できる
  • 異なるデータベース間で互換性がある

2. SQLAlchemyを使ったデータベース操作

2.1 SQLAlchemyのインストール

# SQLAlchemyのインストール
pip install sqlalchemy

2.2 基本的な操作

# SQLAlchemyを使ったデータベース操作の例
from sqlalchemy import create_engine, Column, Integer, String
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)
    age = Column(Integer)

# テーブルの作成
Base.metadata.create_all(engine)

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

# データの挿入
new_user = User(name="太郎", age=25)
session.add(new_user)
session.commit()

# データの取得
users = session.query(User).all()
for user in users:
    print(user.name, user.age)
動作解説
  • create_engine: データベース接続を作成。
  • declarative_base: ORMモデルの基盤となるクラス。
  • sessionmaker: データベース操作のためのセッションを作成。
  • データ操作: データの挿入、取得、コミットを実行。

3. 実践例: データベースアプリケーション作成

3.1 複数テーブルの操作

# 複数テーブルの例
class Address(Base):
    __tablename__ = 'addresses'
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer)
    email = Column(String)

上記のように複数のテーブルを定義し、それらのリレーションを操作できます。

4. 練習問題

以下の課題に挑戦してみましょう。

  1. 新しいテーブルを作成し、データを挿入してください。
  2. SQLAlchemyを使って特定の条件に一致するデータを取得してください。
  3. データベース内のデータを削除する機能を実装してください。

5. 練習問題の解答と解説

問1の解答例

# 新しいテーブルの例
class Product(Base):
    __tablename__ = 'products'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    price = Column(Integer)

問2の解答例

# 条件に一致するデータの取得
expensive_products = session.query(Product).filter(Product.price > 1000).all()

問3の解答例

# データの削除
product_to_delete = session.query(Product).filter(Product.id == 1).first()
session.delete(product_to_delete)
session.commit()

6. まとめ

本記事では、SQLAlchemyを使ったデータベース操作を学びました。次は、さらに高度な機能を試してみましょう。