11

request.args を sqlalchemy フィルターに渡す方法を見つけようとしています。

私はこれがうまくいくはずだと思った:

model.query.filter(**request.args).all()

しかし、それはエラーをスローしています:

TypeError: <lambda>() got an unexpected keyword argument 'userid'

ユーザー ID またはその他の get 引数が存在する場合。

この投稿 ( https://stackoverflow.com/questions/19506105/flask-sqlalchemy-query-with-keyword-as-variable ) によると、dict をフィルター関数に渡すことができます。

私が間違っていることはありますか?

どうもありがとう :)

更新:以下のポスターに感謝しますが、現在は次のエラーがスローされています:

ProgrammingError: (ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ') ORDER BY tblclients.clientname' at line 3") 'SELECT favourites.id AS favourites_id, favourites.userid AS favourites_userid, favourites.clientid AS favourites_clientid, favourites.last_visit AS favourites_last_visit \nFROM favourites INNER JOIN tblclients ON tblclients.clientid = favourites.clientid \nWHERE favourites.userid = %s ORDER BY tblclients.clientname' ([u'41'],)

何か案は?

4

4 に答える 4

19

まず、filter_byではなくを使用する必要がありfilterます。

次に、Flaskrequest.argsは MultiDict を使用します。これは、リスト内の値を持つ dict であり、同じフィールドがクエリ文字列に複数回出現する可能性があるため、同じキーに対して複数の値を許可します。[u'41']SQL クエリが予期したときに のみを取得したため、エラーが発生しました'41'request.args.to_dict()それを修正するために使用できます:

model.query.filter_by(**request.args.to_dict()).all()
于 2013-11-01T21:00:03.900 に答える
4

使用filter_by:

model.query.filter_by(**request.args).all()

filterは次のように使用されます: query.filter(Class.property == value)whilefilter_by は次のように使用されます: query.filter_by(property=value)(最初のものは式で、後者はキーワード引数です)。

于 2013-10-30T11:44:46.893 に答える