Skip to content

Instantly share code, notes, and snippets.

@hdknr
Last active October 18, 2024 06:41
Show Gist options
  • Select an option

  • Save hdknr/386d255a38f0f7cee4bd95ad75802417 to your computer and use it in GitHub Desktop.

Select an option

Save hdknr/386d255a38f0f7cee4bd95ad75802417 to your computer and use it in GitHub Desktop.
SQLModel

検索

filter

SQLAlchemyのfilterfilter_byはどちらもクエリの結果をフィルタリングするために使用されますが、いくつかの重要な違いがあります。

filterメソッド

  • 柔軟性: filterはSQLAlchemyの式言語を使用して、複雑な条件を指定することができます。例えば、複数の条件や比較演算子(==, <, >, など)を使用できます。

  • :

    session.query(User).filter(User.age > 30, User.name == 'John').all()

    この例では、年齢が30歳以上で名前がジョンであるユーザーをフィルタリングしています。

filter_byメソッド

  • 簡潔さ: filter_byはキーワード引数を使用して、シンプルな等価条件を指定するためのショートハンドです。複雑な条件や比較演算子は使用できません。

  • :

    session.query(User).filter_by(age=30, name='John').all()

    この例では、年齢が30歳で名前がジョンであるユーザーをフィルタリングしています。

違いのまとめ

タイムゾーン

# ローカルタイムゾーンを指定(例: 'Asia/Tokyo')
local_tz = pytz.timezone('Asia/Tokyo')

# UTC日時をローカルタイムゾーンに変換
local_datetime = utc_datetime.astimezone(local_tz)

update

SQLAlchemyで検索条件に一致したすべてのレコードのフィールドを更新するには、以下のようなコードを使用できます。

from sqlalchemy import create_engine, update
from sqlalchemy.orm import sessionmaker
from your_model import YourModel  # ここでYourModelをインポート

# データベースエンジンの作成
engine = create_engine('sqlite:///your_database.db')
Session = sessionmaker(bind=engine)
- session = Session()

# 更新する条件とフィールドの値
condition = YourModel.some_field == 'some_value'
new_values = {'another_field': 'new_value'}

# 更新クエリの作成
stmt = update(YourModel).where(condition).values(**new_values)

# クエリの実行
session.execute(stmt)
session.commit()

このコードでは、YourModelsome_field'some_value'に一致するすべてのレコードのanother_field'new_value'に更新します ¹ ²

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment