単純なクエリは、私のコードでは、このSqlalchemyを使用しているFlask用の動的クエリビルダはありますか?
User.query.filter(User.name == 'admin')
のように見える、私が渡され、そのパラメータに基づいて、データベースからの結果をフィルタリングされているパラメータを確認する必要があります。
たとえば、Userテーブルにusername、location、およびemailなどのカラムが含まれている場合、requestパラメータにはそのいずれかが含まれているか、またはカラムの組み合わせを持つことができます。以下に示すように各パラメータをチェックしてフィルタを連鎖させるのではなく、1つのフィルタに渡すことができる1つの動的クエリ文字列を作成し、結果を返すことができます。私は、すべてのパラメータを評価し、クエリ文字列を生成する別の関数を作成したいと思います。クエリ文字列が生成されると、そのクエリ文字列オブジェクトを渡して、目的の結果を得ることができます。 ORMを使用する目的に反してRAW SQLクエリを使用しないようにしたい。
if location:
User.query.filter(User.name == 'admin', User.location == location)
elif email:
User.query.filter(User.email == email)
私が避けたいのは、列の組み合わせを含めてフィルタを行う必要がある列がたくさんあることです。私が使用する必要がある場合、いくつのifsを想像してください。 –
@ShwetabhSharan:「列の組み合わせ」がどのように問題になるかの例を挙げることができますか?ユーザー入力をSQLAlchemy関数に直接渡したくない場合(悪い考え方)には、少なくとも可能なすべてのルックアップキーをメモすることは避けてはいけません。 クエリ= query.filter(User.location ==場所) 電子メールの場合: クエリ= query.filter(User.email ==場所場合=、あなたUser.query を クエリを例を与えることを – Ryan
電子メール) かの場所と電子メール: クエリ= query.filter(User.email ==電子メール、User.location ==場所) 場合は、ユーザー名と所在地: クエリ= query.filter(User.username ==ユーザ名、User.location == location) など –