我正在使用SQLAlchemy和PostgreSQL,我需要生成一个像
这样的语句SELECT * FROM entities WHERE name LIKE '%input%';
LIKE字符串的“input”位来自用户。我希望用户能够包含文字%
和_
字符并完全匹配,显然我需要确保查询不允许SQL注入。在SQLAlchemy中执行此操作的惯用方法是什么?我试过了
entities = session.query(Entity).filter(Entity.name.like('%:text%')) \
.params(text=user_input).all()
但这似乎没有用 - 它没有投诉就执行了,但没有匹配应该匹配的行。
答案 0 :(得分:2)
Entity.name.contains(user_input, autoescape=True)
给定autoescape=True
SQLAlchemy将建立转义字符并转义"%"
,"_"
和转义字符本身的出现次数。您可以使用escape=
参数显式控制转义字符。