PythonでMySQLを効率的に操作する:SQLAlchemyの基本から応用まで

この記事では、PythonプログラミングにおいてMySQLのORMツールとしてよく用いられるSQLAlchemyの基本的な利用方法から応用例までを解説します。具体的なコード例とその解説、応用例を含めています。

目次

SQLAlchemyとは

SQLAlchemyは、PythonのORM(Object Relational Mapping)フレームワークの一つです。データベースをPythonオブジェクトとして抽象化することで、SQLクエリを直接書かずにデータベース操作を行うことができます。

SQLAlchemyのインストール

SQLAlchemyを利用するためには、まずパッケージをインストールする必要があります。

pip install SQLAlchemy

基本的な利用方法

データベース接続

最初のステップとして、データベースに接続します。

from sqlalchemy import create_engine

# MySQLに接続
engine = create_engine('mysql://username:password@localhost/db_name')

このコードでは、`create_engine`関数を用いてMySQLのデータベースに接続しています。

テーブル定義

次に、データベースのテーブルとマッピングするPythonのクラスを定義します。

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))
    email = Column(String(50))

こちらのコードでは、`users`テーブルに`id`, `name`, `email`という3つのカラムを持つクラス`User`を定義しています。

データの挿入

テーブル定義が完了したら、データを挿入できます。

from sqlalchemy.orm import Session

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

# ユーザー追加
new_user = User(name='Taro', email='taro@example.com')
session.add(new_user)

# コミット
session.commit()

この例では、`User`クラスのインスタンスを作成し、`add`メソッドでセッションに追加、最後に`commit`メソッドでデータベースに反映しています。

応用例

データのフィルタリング

# データのフィルタリング
filtered_users = session.query(User).filter_by(name='Taro').all()

# 結果表示
for user in filtered_users:
    print(user.id, user.name, user.email)

この応用例では、名前が’Taro’であるユーザーをフィルタリングしています。

複数テーブルの連結

from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship

class Address(Base):
    __tablename__ = 'addresses'
    
    id = Column(Integer, primary_key=True)
    user_id = Column(Integer, ForeignKey('users.id'))
    email = Column(String(50))

    user = relationship("User", back_populates="addresses")

User.addresses = relationship("Address", order_by=Address.id, back_populates="user")

# ユーザーとアドレス追加
new_user = User(name='Taro', email='taro@example.com')
new_user.addresses = [Address(email='taro@gmail.com'), Address(email='taro@yahoo.com')]

session.add(new_user)
session.commit()

この例では、`User`クラスと`Address`クラスを関連付けています。こうすることで、1つのユーザーが複数のアドレスを持てるようになります。

まとめ

SQLAlchemyはPythonでMySQLを扱う際の強力なツールです。基本的なCRUD操作から、より複雑なデータ操作まで幅広くカバーしています。この記事で紹介した内容を基に、是非とも実際の開発での利用を考えてみてください。

コメント

コメントする

目次