SQL "LIKE" 문과 동등한 SQL Lchemy
태그 열에는 "사과 바나나 오렌지" 및 "딸기 바나나 레몬"과 같은 값이 있습니다.나는 SQLchemy와 동등한 문장을 찾고 싶습니다.
SELECT * FROM table WHERE tags LIKE "%banana%";
무엇을 전달해야 합니까?Class.query.filter()
이거 하려고요?
각 열은 다음이 있습니다.like()
method, 에서 사용할 수 있는query.filter()
. 검색 문자열이 지정된 경우 다음을 추가합니다.%
양쪽에서 하위 문자열로 검색할 문자입니다.
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
위의 답변에, 누가 해결책을 찾든지 간에, '좋아요' 대신 '일치' 연산자를 사용해 볼 수도 있습니다.편향되고 싶지 않지만 포스트그레스ql에서 완벽하게 작동했습니다.
Note.query.filter(Note.message.match("%somestr%")).all()
CONTENS, MATCH 등의 데이터베이스 기능을 이어받습니다.그러나 SQLite에서는 사용할 수 없습니다.
자세한 내용은 공통 필터 연산자로 이동하십시오.
다음 코드를 사용해 보십시오.
output = dbsession.query(<model_class>).filter(
<model_class>.email.ilike("%" + <email> + "%")
)
대소문자를 구분하지 않는 like 절 구현을 원하는 경우:
session.query(TableName).filter(TableName.colName.ilike(f'%{search_text}%')).all()
SQLLchemy 1.4/2.0의 경우:
q = session.query(User).filter(User.name.like('e%'))
native 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()
PostgreSQL 사용like
(위의 허용된 답변 참조) 케이스는 일치하지만, (케이스가 민감하지 않은) 케이스는 일치합니다.
승인된 답변은 정상적으로 작동하지만, "ORM Query 개체는 SQLAlchemy 2.0의 레거시 구성체입니다"(ref: Legacy Query API - SQLAlchemy 2.0 Documentation).
SQL과 동등한 SQLLchemy v2.0LIKE
를 사용한 문장select
컨스트럭트는 아래 파이썬 3.10 코드 스니펫과 같습니다.
from typing import List
from sqlalchemy import select
from sqlalchemy.orm import Session
...
def get_multi_like_tag_substring_bidirectional(
db: Session,
*,
tags_search_substring: str,
skip: int = 0,
limit: int = 10,
) -> List[Post]:
return db.scalars(
select(Post)
.where(Post.tags.like(f"%{tags_search_substring}%"))
.offset(skip)
.limit(limit)
).all()
...
banana_tagged_posts = get_multi_like_tag_substring_bidirectional(
db=db_session,
tags_search_substring = "banana"
)
그동안 내가 사용해왔던 것들:
model = MyModel
col = "name_of_my_column"
value = "your-value"
query = model.query.filter(getattr(model, col).like("%{}%".format(value))).all()
천만에요! ;) 저는 베이베이가 제가 뭘 하는지 모르겠어요 허허
이렇게 하는 것이 네이티브 sql로서 나(Oracle)에게 효과가 있었습니다.
"SELECT * FROM table WHERE tags LIKE '%' || :bar_tags || '%' "
언급URL : https://stackoverflow.com/questions/3325467/sqlalchemy-equivalent-to-sql-like-statement
'programing' 카테고리의 다른 글
동일한 테이블에 여러 인덱스를 동시에 만들 수 있는 데이터베이스가 있습니까? (0) | 2023.09.28 |
---|---|
Piwik 사용자 정의 변수별 필터 그래프 (0) | 2023.09.28 |
Web Api + HttpClient:비동기 작업이 보류 중인 동안 비동기 모듈 또는 핸들러가 완료되었습니다. (0) | 2023.09.28 |
MySQL Workbench는 결과를 BLOB로 표시합니다. (0) | 2023.09.28 |
새 가져오기 표준에 의해 시작된 요청을 탐지하려면 어떻게 해야 합니까?일반적으로 어떻게 AJAX 요청을 감지해야 합니까? (0) | 2023.09.28 |