【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. 練習問題
以下の課題に挑戦してみましょう。
- 新しいテーブルを作成し、データを挿入してください。
- SQLAlchemyを使って特定の条件に一致するデータを取得してください。
- データベース内のデータを削除する機能を実装してください。
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を使ったデータベース操作を学びました。次は、さらに高度な機能を試してみましょう。