2
私はis_deleted
フィールドを持っていますが、このレコードは削除されていますが、テーブルには存在しています。すべてのSQLAlchemyのクエリでデフォルト条件を実装する方法
SQLAlchemyのすべてのクエリでis_deleted=True
のレコードを無視する方法はありません。
私はis_deleted
フィールドを持っていますが、このレコードは削除されていますが、テーブルには存在しています。すべてのSQLAlchemyのクエリでデフォルト条件を実装する方法
SQLAlchemyのすべてのクエリでis_deleted=True
のレコードを無視する方法はありません。
sqlalchemy eventは解決策です!
from sqlalchemy.orm.query import Query
from sqlalchemy import event
@event.listens_for(Query, "before_compile", retval=True)
def no_deleted(query):
for desc in query.column_descriptions:
entity = desc['entity']
if entity:
query = query.filter(entity.is_deleted == False)
return query
あなたは私の場合の使用には、このような「ユーザー」などのモデル名(SQLAlchemyのモデルクラス名)を指定したい場合:
if entity == 'User':
query = query.filter(entity.is_verified == True)
を、このようなフィルタリングは生-SQL /コアレベルで行うことができますか?特定のクエリタイプをフィルタリングして置き換えたい方言ではどうですか?私の具体的な問題はdatetimesです - https://stackoverflow.com/questions/46027152/which-part-of-sqlalchemys-dialect-is-responsible-for-pre-processing-queries – Jay