2012-09-14 11 views
10

SQLAlchemyを使用してFlaskにインターフェイスを構築していますが、その一部は検索APIです。基本的に先行入力入力は、(例えば、電子メール用)、その値を使用してサーバーを呼び出していると、サーバはSQLAlchemyの.like()メソッドに文字列を渡す方法

q = session.query(User).filter(User.email.like('%'+term+'%')).all() 

の下にこのクエリが本当に戻っていないようにフィルターに.like使用SQLAlchemyのクエリを実行しています有用なものと最初の数文字の後のものは何もありません。しかし、私はそうのように、ハードコーディングされた用語で同じクエリを実行した場合:

q = session.query(User).filter(User.email.like('%mysearchterm%')).all() 

それは完全に罰金結果を返しますので、そこに私のような()メソッドに用語を入れている方法で何かだが、私は本当にすることができます問題が何であるか把握していない。この用語はajax POSTから来ており、値はサーバー側にあります。ちょうど.like()が正しく使用していません。

「役に立たない」とは、実際の用語が入力されてから最初に返される結果が、3〜4より長い期間が経過した後に、 DB。

大変助かりました。

+1

あなたはその用語があなたが期待していることは確かですか?変数に同様の文字列 '%' + term + '%'を作成して変数を出力すると、期待通りになっていますか?また、「このクエリはユーザーフレンドリーなものを本当に返すわけではありません」とはどういう意味ですか?最後に、[ログを有効にする](http://docs.sqlalchemy.org/en/rel_0_7/core/engines.html#configuring-logging)と実際にSQLが生成する内容を確認してください。 –

+0

私のフラスコのアプリ内のメソッドでは、クエリが実行される前に用語を表示しています。用語が機能に反映されるように、用語のポップアップをコンソールに表示できます。私はちょうど印刷 '%' +用語 '%'とその出力%myterm%をコンソールにも試しました。本当に有用ではないのは、返される結果の最初のセットが、3〜4文字のabotuの後に結果が返されないという条件とは関係がないことを意味します。 – jduren

答えて

7

問題が解決しました。このクエリは、リミットとオフセットが返された結果セットが空だった結果の量よりも高いため、関数の後半でクエリにリミットとオフセットを適用したより大きなクエリビルダー関数の内部にありました。

これは人的ミスや睡眠不足に至るまで鎮静化することができます。

関連する問題