いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「PythonでSQLAlchemyを使ったデータベース操作の実装方法を知りたい」とお考えではありませんか?
Pythonアプリケーションでデータベースへの保存や取得を実装したいと考えている方へ向けて書きます。
SQLAlchemyを使えば、SQL文を直接書かずにPythonのコードだけでデータベース操作が可能です。



ベリーイージーなのでサクッと解説します。
ということで、本記事ではPythonでSQLAlchemyを使ったCRUD操作を実装する方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【Python】SQLAlchemyでCRUD操作を実装する方法
早速ですが、PythonでSQLAlchemyを使ったCRUD操作を実装します。
SQLAlchemyの準備
まずは、SQLAlchemyのインストールとデータベース接続の準備をします。
SQLAlchemyはpipコマンドでインストールできます。
pip install sqlalchemycreate_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でも接続文字列を変えるだけで対応できます。
モデルの定義
次に、テーブルに対応するモデルクラスを定義します。
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を組み合わせることで、型ヒント付きでカラムを宣言できます。
Base.metadata.create_all(engine)create_allメソッドを実行すると、モデル定義に基づいてテーブルが作成されます。



型ヒントが効くので、エディタの補完が効いて書きやすいですね。
データを登録する(Create)
続いて、データを登録する処理を実装します。
with SessionLocal() as session:
new_user = User(name="山田太郎", email="yamada@example.com")
session.add(new_user)
session.commit()SessionLocalクラスからセッションを生成し、addメソッドでオブジェクトを追加します。
commitメソッドを呼び出すまでは、データベースに変更が反映されません。
データを取得する(Read)
登録したデータを取得する処理を実装します。
from sqlalchemy import select
with SessionLocal() as session:
stmt = select(User)
users = session.scalars(stmt).all()select関数でクエリを組み立て、scalarsメソッドで実行します。
stmt = select(User).where(User.name == "山田太郎")
user = session.scalars(stmt).first()whereメソッドで条件を指定すれば、絞り込み検索ができます。



session.query()という書き方も残っていますが、select()を使う書き方が現在の標準です。
データを更新する(Update)
取得したデータを更新する処理を実装します。
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)
最後に、データを削除する処理を実装します。
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つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- 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操作を実装する方法について解説しました。
以下が本記事のまとめになります。
- おすすめ本
Pythonの勉強なら「独習Python



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。









