タグ列には、「アップルバナナオレンジ」や「ストロベリーバナナレモン」などの値があります。SQLAlchemyと同等のステートメントを見つけたい
SELECT * FROM table WHERE tags LIKE "%banana%";
これを行うには何を渡す必要Class.query.filter()
がありますか?
タグ列には、「アップルバナナオレンジ」や「ストロベリーバナナレモン」などの値があります。SQLAlchemyと同等のステートメントを見つけたい
SELECT * FROM table WHERE tags LIKE "%banana%";
これを行うには何を渡す必要Class.query.filter()
がありますか?
回答:
各列にはlike()
、で使用できるメソッドがありますquery.filter()
。検索文字列を指定して、%
両側に文字を追加して、両方向の部分文字列として検索します。
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
tags
、あなたがタグ名と他のタグ情報を格納するテーブルを、あなたは持っているだろうtask_tags
、テーブルをどのタスクに追加されたタグごとに1つのレコードがあります。したがって、2つのタグを持つタスクでは、task_tags
テーブルに2つのレコードがあります。
上記の答えに加えて、解決策を探す人は誰でも、「like」の代わりに「match」演算子を試すことができます。偏見を持ちたくないのですが、Postgresqlでは完全に機能しました。
Note.query.filter(Note.message.match("%somestr%")).all()
CONTAINSやMATCHなどのデータベース関数を継承します。ただし、SQLiteでは使用できません。
詳細については、Common FilterOperatorsを参照してください。
to_tsquery
OR
AND
PostgreSQLの使用like
(上記の受け入れ答えを参照してください私のために何とか仕事しませんでした)場合は、マッチしたものの、しかし、ilike
(ケース私はnsensisitiveのような)い。
ILIKE
は大文字と小文字を区別しないバージョンでLIKE
あるため、入力は大文字と小文字のみが異なります。
ネイティブSQLを使用している場合は、私のコードを参照できます。それ以外の場合は、私の答えを無視してください。
SELECT * FROM table WHERE tags LIKE "%banana%";
from sqlalchemy import text
bar_tags = "banana"
# '%' attention to spaces
query_sql = """SELECT * FROM table WHERE tags LIKE '%' :bar_tags '%'"""
# db is sqlalchemy session object
tags_res_list = db.execute(text(query_sql), {"bar_tags": bar_tags}).fetchall()