2017-06-16 30 views
0

私は作品を知って、クエリがあります。これは、「正確な」言葉と「表現」の両方を持つ任意の論文を返すSQLAlchemyの - 複雑なクエリのための文字列置換

SELECT title FROM paper WHERE MATCH (title) AGAINST ('+exact +representations' IN BOOLEAN MODE)

を。 SQLAlchemyのの文字列置換を使用して、私が行います

keyword = '+exact +representations' 
sql = 'SELECT title FROM paper WHERE MATCH (title) AGAINST (:keyword IN BOOLEAN MODE)' 
conn = db.engine.connect() 
t = conn.execute(text(sql), keyword=keyword) 

これは、両方のキーワードを持つだけの論文と一致しません。代わりに、いずれかの単語で論文を返します。

私の推測では、SQLAlchemyは前処理ステップでkeywordをマングリングしています。 SQLAlchemyの文字列置換機能を使用するにはどうしたらよいですか?

+0

MySQLに送信されるクエリを表示するには、クエリのログ記録 'create_engine(...、echo = True)'を有効にします。 – plaes

+0

あなたの代わりに引用符AGAINST( ":キーワード" IN "、元のSQLは引用符で囲まれています)を使って試しましたか? –

+0

@NigelRenプレースホルダー置換は適切に引用を処理します。 (SQLインジェクションについて心配する必要はありません) –

答えて

0

私はSQLAlchemyの内蔵のmatch機能を使って解を得ることができました:

keyword = '"exact representations"' 
ids += db.session.query(models.Paper)\ 
    .filter(models.Paper.title.match(keyword))\ 
    .all() 

FWIW、私はMySQL specあたり'+exact +representations'を使用して正確に両方の単語と一致することができませんでした。しかし、これはSQLAlchemyから独立しているようです。

関連する問題