SQLAlchemyの詳細

2024年6月18日

SQLAlchemyはPythonのための強力なORM(Object Relational Mapper)であり、リレーショナルデータベースとの対話を効率的かつ抽象的に行うことができます。以下は、SQLAlchemyの基本的な概念とサンプルコードの例です。

SQLAlchemyの基本的な概念:

  1. モデルの定義:
    • データベースのテーブルをPythonのクラスとして表現します。各クラスの属性はテーブルのカラムに対応します。
    python
    from sqlalchemy import create_engine, 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)
    
  2. データベースセッションの作成:
    • データベースとの対話に使用するセッションを作成します。
    python
    from sqlalchemy.orm import sessionmaker
    
    engine = create_engine('sqlite:///example.db')
    Session = sessionmaker(bind=engine)
    session = Session()
    
  3. クエリの発行:
    • SQLAlchemyのクエリを使用してデータベースに対する操作を行います。
    python
    # データのクエリ
    user = session.query(User).filter_by(name='John').first()
    
    # データの挿入
    new_user = User(name='Alice')
    session.add(new_user)
    session.commit()
    
    # データの更新
    user.name = 'Jane'
    session.commit()
    
    # データの削除
    session.delete(user)
    session.commit()
    
  4. トランザクションの管理:
    • SQLAlchemyはトランザクションの自動管理をサポートしています。
    python
    # トランザクションの開始
    with session.begin():
        user1 = User(name='John')
        session.add(user1)
    
        user2 = User(name='Alice')
        session.add(user2)
    

サンプルコード:

以下は、SQLAlchemyを使用してデータベースにユーザーを追加してクエリする簡単なサンプルコードです。

python
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)

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

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

# ユーザーの追加
new_user = User(name='John')
session.add(new_user)
session.commit()

# ユーザーのクエリ
user = session.query(User).filter_by(name='John').first()
print(user.name)

このコードはSQLiteデータベースを使用していますが、他のデータベースエンジンでも同様に適用できます。SQLAlchemyの公式ドキュメントやチュートリアルも参考にすると良いでしょう。

未分類

Posted by ぼっち