Python
でのデータベース操作を簡単に、かつ効率的に行うためにはSQLAlchemy
というライブラリが非常に便利です。SQLAlchemyは、データベース操作を抽象化して扱えるORM(オブジェクトリレーショナルマッピング)機能を提供し、SQLの知識が少ない開発者でも簡単にデータベースとのやり取りができるようになります。本記事では、SQLAlchemyを使ったPython
でのデータベース操作の基本を紹介します。
SQLAlchemyとは?
SQLAlchemy
は、Python
でデータベース操作を行うためのライブラリで、特にORM機能が充実しています。ORMを使うと、データベースのテーブルやレコードをPython
のクラスやオブジェクトとして扱うことができ、SQLの文法をあまり意識せずにデータベース操作を行うことができます。
主な機能:
- データベースと簡単に接続できる
- テーブルを
Python
クラスとして定義 - データの挿入、取得、更新、削除を
Python
コードで実行 - 多様なデータベース(MySQL、PostgreSQL、SQLiteなど)に対応
SQLAlchemyのインストール
まずは、SQLAlchemyをインストールしましょう。以下のコマンドでインストールできます。
pip install sqlalchemy
さらに、SQLiteなどのデータベースを操作するために必要なドライバもインストールする必要があります。SQLiteの場合は特別な設定は不要ですが、MySQLを使う場合は以下のようにmysqlclient
もインストールします。
pip install mysqlclient
データベースへの接続
SQLAlchemyを使ってデータベースに接続するには、create_engine
を使います。今回はシンプルなSQLiteを使った例で進めます。
from sqlalchemy import create_engine
# SQLiteデータベースに接続(ファイルベース)
engine = create_engine('sqlite:///example.db', echo=True)
create_engine
は、データベースの接続文字列を受け取り、データベースへの接続を管理します。上記のコードでは、SQLiteデータベース「example.db」を作成または接続し、echo=True
を指定することで実行されるSQL文をコンソールに出力します。
テーブルの定義(クラスによる定義)
SQLAlchemyでは、データベースのテーブルはPython
のクラスとして定義します。このクラスにより、ORMがテーブルの構造を把握し、SQL文を自動生成してくれます。
まず、基本的なテーブルを定義してみましょう。
from sqlalchemy import Column, Integer, String
from sqlalchemy.orm import declarative_base
# ORMで使用するベースクラスの作成
Base = declarative_base()
# ユーザーテーブルの定義
class User(Base):
__tablename__ = 'users' # テーブル名
id = Column(Integer, primary_key=True) # 主キー
name = Column(String, nullable=False) # 名前(空は許可しない)
age = Column(Integer) # 年齢
def __repr__(self):
return f"<User(name={self.name}, age={self.age})>"
declarative_base()
は、テーブル定義のための基本クラスを生成します。__tablename__
でテーブル名を指定します。- 各カラムは
Column
を使って定義し、データ型(Integer
,String
など)とオプションを指定します。 このUser
クラスは、データベースのusers
テーブルに対応します。テーブルのカラムとしてid
,name
,age
が定義されており、id
は主キーとして設定されています。
テーブルの作成
定義したテーブルをデータベースに反映させるためには、create_all
メソッドを使います。
# データベースにテーブルを作成
Base.metadata.create_all(engine)
これで、users
テーブルがexample.db
というSQLiteデータベースに作成されます。
データの挿入(Create)
データベースに新しいレコードを挿入するには、まずセッションを開始し、ORMのオブジェクトを使ってデータを追加します。
from sqlalchemy.orm import sessionmaker
# セッションの作成
Session = sessionmaker(bind=engine)
session = Session()
# 新しいユーザーの追加
new_user = User(name="Alice", age=25)
session.add(new_user) # セッションに追加
session.commit() # データベースに保存
ここでは、新しいユーザー「Alice」を作成し、データベースに挿入しています。commit
メソッドで変更を確定し、データベースに保存します。
データの取得(Read)
挿入したデータを取得するには、session.query
メソッドを使います。例えば、すべてのユーザーを取得する場合は次のようにします。
# ユーザーの全件取得
users = session.query(User).all()
for user in users:
print(user)
また、特定の条件でデータを取得することもできます。例えば、名前が「Alice」のユーザーを取得する場合は以下のようにします。
# 名前がAliceのユーザーを取得
alice = session.query(User).filter_by(name="Alice").first()
print(alice)
データの更新(Update)
データを更新するには、まず変更したいオブジェクトを取得し、その属性を更新してからcommit
を実行します。
# 名前がAliceのユーザーを取得し、年齢を更新
alice = session.query(User).filter_by(name="Alice").first()
alice.age = 26 # 年齢を更新
session.commit() # データベースに反映
これにより、「Alice」の年齢が26に更新されます。
データの削除(Delete)
データを削除する場合は、対象のオブジェクトを取得してからdelete
メソッドを使います。
# 名前がAliceのユーザーを削除
alice = session.query(User).filter_by(name="Alice").first()
session.delete(alice) # 削除
session.commit() # データベースに反映
これにより、users
テーブルから「Alice」のデータが削除されます。
まとめ
SQLAlchemy
を使うことで、SQL文を直接書かずにPython
コードを使って効率的にデータベース操作を行うことができます。今回は、SQLAlchemyを使った基本的なCRUD(Create, Read, Update, Delete)の操作方法を紹介しましたが、この
ほかにも複雑なクエリやリレーション(テーブル間の関連)を定義することが可能です。
データベース操作が必要なPython
プロジェクトでは、SQLAlchemyを利用することで、コードの可読性を向上させ、効率的な開発を進めることができるでしょう。