Cột thẻ có các giá trị như "táo chuối cam" và "dâu tây chuối chanh". Tôi muốn tìm câu lệnh tương đương SQLAlchemy để
SELECT * FROM table WHERE tags LIKE "%banana%";
Tôi nên vượt qua Class.query.filter()
những gì để làm điều này?
Cột thẻ có các giá trị như "táo chuối cam" và "dâu tây chuối chanh". Tôi muốn tìm câu lệnh tương đương SQLAlchemy để
SELECT * FROM table WHERE tags LIKE "%banana%";
Tôi nên vượt qua Class.query.filter()
những gì để làm điều này?
Câu trả lời:
Mỗi cột có like()
phương thức, có thể được sử dụng trong query.filter()
. Cho một chuỗi tìm kiếm, hãy thêm một %
ký tự vào hai bên để tìm kiếm dưới dạng chuỗi con theo cả hai hướng.
tag = request.form["tag"]
search = "%{}%".format(tag)
posts = Post.query.filter(Post.tags.like(search)).all()
tags
bảng, nơi bạn lưu trữ tên thẻ và thông tin thẻ khác, và bạn sẽ có task_tags
bảng, sẽ có một bản ghi cho mỗi thẻ được thêm vào nhiệm vụ. Vì vậy, tác vụ với 2 thẻ sẽ chỉ có 2 bản ghi trong task_tags
bảng.
Thêm vào câu trả lời ở trên, bất kỳ ai đang tìm kiếm giải pháp, bạn cũng có thể thử toán tử 'khớp' thay vì 'thích'. Không muốn bị thiên vị nhưng nó hoàn toàn phù hợp với tôi trong Postgresql.
Note.query.filter(Note.message.match("%somestr%")).all()
Nó kế thừa các chức năng cơ sở dữ liệu như CONTAINS và MATCH . Tuy nhiên, nó không có sẵn trong SQLite.
Để biết thêm thông tin, hãy truy cập Các toán tử bộ lọc phổ biến
to_tsquery
nó cho phép bạn thêm toán tử văn bản cho những thứ như OR
và AND
postgresql.org/docs/current/…
Sử dụng PostgreSQL like
( xem câu trả lời được chấp nhận ở trên ) bằng cách nào đó không làm việc cho tôi mặc dù trường hợp phù hợp , nhưng ilike
(trường hợp i nsensisitive như ) không.
ILIKE
là phiên bản không phân biệt chữ hoa chữ thường của LIKE
, vì vậy đầu vào của bạn chỉ khác nhau trong trường hợp.
Nếu bạn sử dụng sql gốc, bạn có thể tham khảo mã của tôi, nếu không thì chỉ cần bỏ qua câu trả lời của tôi.
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()