【Python】SQLAlchemyでCRUD操作を実装する方法

当ページのリンクには広告が含まれています。
いずみ

こんな悩みを解決できる記事を書きました!

僕は現役フリーランスエンジニア(歴年)で、資格は個保有しています。

PythonでSQLAlchemyを使ったデータベース操作の実装方法を知りたい」とお考えではありませんか?

Pythonアプリケーションでデータベースへの保存や取得を実装したいと考えている方へ向けて書きます。

SQLAlchemyを使えば、SQL文を直接書かずにPythonのコードだけでデータベース操作が可能です。

いずみ

ベリーイージーなのでサクッと解説します。

ということで、本記事ではPythonでSQLAlchemyを使ったCRUD操作を実装する方法を解説します。

いずみ

すぐ読み終わるので、ぜひ最後まで読んでくださいませ。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
執筆者/監修者
  • フリーランスエンジニア(保有資格個、企業と直接契約
  • ブログ・アフィリエイト歴7年(2018年〜)
  • ブランドせどりで月利50万円⇨脱サラ
  • 投資(仮想通貨・FX)歴7年(2018年〜)
  • X(旧Twitter)フォロワー約1,900人
  • 運営者情報はこちら
いずみです
目次

【Python】SQLAlchemyでCRUD操作を実装する方法

早速ですが、PythonでSQLAlchemyを使ったCRUD操作を実装します。

SQLAlchemyの準備

まずは、SQLAlchemyのインストールとデータベース接続の準備をします。

STEP
ライブラリをインストールする

SQLAlchemyはpipコマンドでインストールできます。

pip install sqlalchemy
STEP
エンジンとセッションを作成する

create_engine関数でデータベースへの接続を作成し、sessionmaker関数でセッションを作るための工場を用意します。

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker

engine = create_engine("sqlite:///example.db")
SessionLocal = sessionmaker(bind=engine)
いずみ

今回はSQLiteを使いますが、PostgreSQLやMySQLでも接続文字列を変えるだけで対応できます。

モデルの定義

次に、テーブルに対応するモデルクラスを定義します。

STEP
モデルクラスを作成する

DeclarativeBaseクラスを継承したBaseクラスから、Userモデルを定義します。

from sqlalchemy import String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column


class Base(DeclarativeBase):
    pass


class User(Base):
    __tablename__ = "users"

    id: Mapped[int] = mapped_column(primary_key=True)
    name: Mapped[str] = mapped_column(String(50))
    email: Mapped[str] = mapped_column(String(100), unique=True)

MappedとMapped_columnを組み合わせることで、型ヒント付きでカラムを宣言できます。

STEP
テーブルを作成する
Base.metadata.create_all(engine)

create_allメソッドを実行すると、モデル定義に基づいてテーブルが作成されます。

いずみ

型ヒントが効くので、エディタの補完が効いて書きやすいですね。

データを登録する(Create)

続いて、データを登録する処理を実装します。

STEP
セッションを開いてデータを追加する
with SessionLocal() as session:
    new_user = User(name="山田太郎", email="yamada@example.com")
    session.add(new_user)
    session.commit()

SessionLocalクラスからセッションを生成し、addメソッドでオブジェクトを追加します。

commitメソッドを呼び出すまでは、データベースに変更が反映されません。

データを取得する(Read)

登録したデータを取得する処理を実装します。

STEP
全件取得する
from sqlalchemy import select

with SessionLocal() as session:
    stmt = select(User)
    users = session.scalars(stmt).all()

select関数でクエリを組み立て、scalarsメソッドで実行します。

STEP
条件を指定して取得する
stmt = select(User).where(User.name == "山田太郎")
user = session.scalars(stmt).first()

whereメソッドで条件を指定すれば、絞り込み検索ができます。

いずみ

session.query()という書き方も残っていますが、select()を使う書き方が現在の標準です。

データを更新する(Update)

取得したデータを更新する処理を実装します。

STEP
対象を取得して値を書き換える
with SessionLocal() as session:
    stmt = select(User).where(User.id == 1)
    user = session.scalars(stmt).first()
    user.email = "new-email@example.com"
    session.commit()

取得したオブジェクトの属性を直接書き換えて、commitメソッドを呼ぶだけで更新できます。

データを削除する(Delete)

最後に、データを削除する処理を実装します。

STEP
対象を取得して削除する
with SessionLocal() as session:
    stmt = select(User).where(User.id == 1)
    user = session.scalars(stmt).first()
    session.delete(user)
    session.commit()

deleteメソッドに削除したいオブジェクトを渡して、commitメソッドを呼びます。

いずみ

CRUDの基本操作は以上です。

add・commit・deleteの各メソッドを押さえれば十分実務で使えます。

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式

【厳選】フリーランスエンジニアにおすすめなエージェント3選

フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。

僕が実際に利用しているおすすめエージェントを紹介しますね。

いずみ

エージェントは必ず複数登録してください。

担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…

僕は実際に5つのエージェントを使い回していますよ。

フリーランスを始めるなら「

案件数マージン率単価
約88,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 業界最大級の案件数。
  • 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
  • 案件参画中のフォローの充実。

※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。

は業界最大手のフリーランスエージェントです。

とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!

いずみ

僕もはじめてフリーランスの案件を貰ったのはです。

保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。

手厚い保障を重視したいなら「

案件数マージン率単価
約10,000件非公開
初心者福利厚生申し込み
無料
Good Point
  • 手厚い保障で正社員並みの安心感。
  • 還元率60%超え&単価公開でクリアな契約。
  • 給与保障制度(審査あり)。

は手厚い保障が特徴のフリーランスエージェントです。

フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。

いずみ

僕も何度か案件を紹介してもらいました。

自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。

週2〜3日の案件探しなら「

案件数マージン率単価
約5,000件非公開
初心者福利厚生申し込み
経験者向け無料
Good Point
  • IT案件に特化したフリーランスエージェント。
  • 週2〜3日の案件が豊富。
  • リモート案件が多く、直エンドなので単価も高い。

※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。

はIT案件に特化したフリーランスエージェントです。

週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。

いずみ

週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。

とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!

よくある質問

SQLAlchemyとDjango ORMの違いは何ですか?

Django ORMはDjangoフレームワークに組み込まれた専用のORMです。

SQLAlchemyはフレームワークに依存しない独立したライブラリなので、FlaskやFastAPIなど様々な構成で利用できます。

session.query()とselect()はどちらを使うべきですか?

select()を使う書き方がSQLAlchemy2系の標準的な書き方です。

session.query()は互換性のために残されているので、新しく書くコードではselect()を使う書き方が推奨されます。

非同期処理でSQLAlchemyを使えますか?

create_async_engine関数とAsyncSessionクラスを使えば、非同期処理でもデータベース操作が可能です。

FastAPIのような非同期フレームワークと組み合わせる場合に活用できます。

まとめ

今回は、PythonでSQLAlchemyを使ったCRUD操作を実装する方法について解説しました。

以下が本記事のまとめになります。

まとめ
  • SQLAlchemyはMappedとMapped_columnで型ヒント付きのモデルを定義できる。
  • select()とscalars()を組み合わせたクエリの書き方が現在の標準になっている。
  • add・commit・delete各メソッドだけでCRUD操作をシンプルに実装できる。
まとめ
  • おすすめ本
¥2,970 (2023/07/25 22:48時点 | Amazon調べ)

Pythonの勉強なら「」が体系的に学べるのでおすすめですよ♪

いずみ

最後までお読みいただき、ありがとうございました!

スクロールできます
【当サイト】おすすめフリーランスエージェント3選
エージェント評価ポイント公式サイト
レバテックフリーランス

5.0
業界最大級のエージェント。
高単価案件が豊富。
公式
Midworks

4.8
満足度調査で
3年連続3冠を達成。
公式
ITプロパートナーズ

4.6
週2〜3向けの案件が豊富。公式
  • クソおすすめ本
¥4,480 (2024/06/01 23:28時点 | Amazon調べ)
いずみ

海外のエンジニアがどういった思考で働いているかが理解できます。

海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。

この記事が気に入ったら
フォローしてね!

シェアしてね!
  • URLをコピーしました!
目次