[python] SQL“LIKE”문에 해당하는 SQLAlchemy

태그 열에는 ‘사과 바나나 오렌지’및 ‘딸기 바나나 레몬’과 같은 값이 있습니다. 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()


답변

위의 답변에 추가하여 솔루션을 찾는 사람은 ‘좋아요’대신 ‘일치’연산자를 사용해 볼 수도 있습니다. 편향되고 싶지는 않지만 Postgresql에서 완벽하게 작동했습니다.

Note.query.filter(Note.message.match("%somestr%")).all()

CONTAINSMATCH 와 같은 데이터베이스 함수를 상속합니다 . 그러나 SQLite에서는 사용할 수 없습니다.

자세한 내용은 일반 필터 연산자 로 이동하십시오.


답변

이 코드를 시도

output = dbsession.query(<model_class>).filter(<model_calss>.email.ilike('%' + < email > + '%'))


답변

PostgreSQL like( 위의 수락 된 답변 참조)을 사용하면 케이스가 일치하더라도 어떻게 든 작동하지 않았지만 ilike(case i nsensisitive 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()


답변