◾️はじめに
https://dk521123.hatenablog.com/entry/2025/10/07/133808
https://dk521123.hatenablog.com/entry/2025/10/10/013250
の続き。 今回は、SQLAlchemyのTipsなどをまとめておく
目次
【1】ページネーション 1)Order By 2)LIMIT 3)OFFSET 【2】外部キーがあるテーブルを連結する 【3】検索条件 1)ilike
【1】ページネーション
session.query(【モデル】)
.order_by(【モデル】.【項目】.desc())
.offset(【オフセット数】)
.limit(【制限数】)
.all()
1)Order By
* order_by() で指定 * 【モデル】.【項目】.desc() / .asc() で順番指定
サンプル
is_desc = True order = JobInfo.created_at.desc() if is_desc else JobInfo.created_at.asc() session.query(JobInfo) .order_by(order) .all()
2)LIMIT
* limit() で指定
サンプル
JobInfo.created_at.asc()
session.query(JobInfo)
.limit(5)
.all()
3)OFFSET
* offset() で指定
サンプル
is_desc = True order = JobInfo.created_at.desc() if is_desc else JobInfo.created_at.asc() session.query(JobInfo) .order_by(order) .offset(6) .all()
【2】外部キーがあるテーブルを連結する
*
https://docs.sqlalchemy.org/en/20/orm/backref.html
サンプル
from sqlalchemy import Column, ForeignKey, BigInteger, Text from sqlalchemy.orm import DeclarativeBase # Define table class Base(DeclarativeBase): pass class Person(Base): __tablename__ = "person" id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(Text) section_id = Column(BigInteger, ForeignKey('section.id')) class Section(Base): __tablename__ = "section" id = db.Column(BigInteger, primary_key=True, autoincrement=True) name = db.Column(Text) person = relationship('Person', backref=db.backref('section', lazy=True)) # 以下のような感じで取得する # person.section_id # person.section.name
【3】検索条件
1)ilike
* ilike = insensitive LIKE (大文字小文字を区別しない文字列マッチング) cf. insensitive = 鈍感な
https://nainaistar.hatenablog.com/entry/insentive-in-sql-alchemy
https://qiita.com/Bashi50/items/7f2214550e80b87fb922
例
query = query.filter(
or_(
JobInfo.company_name.ilike(f"%{search.lower()}%"),
JobInfo.position.ilike(f"%{search.lower()}%"),
JobInfo.location.ilike(f"%{search.lower()}%"),
)
)
関連記事
Python ORM ~ SQLAlchemy / 入門編 ~
https://dk521123.hatenablog.com/entry/2025/10/07/133808
Python ORM ~ SQLAlchemy / 基本編 ~
https://dk521123.hatenablog.com/entry/2025/10/10/013250
Flask ~ SQLAlchemy / 入門編 ~
https://dk521123.hatenablog.com/entry/2018/09/19/223200
Flask ~ SQLAlchemy / 基本編 ~
https://dk521123.hatenablog.com/entry/2018/09/23/165130