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を利用することで、コードの可読性を向上させ、効率的な開発を進めることができるでしょう。