我正在我的应用程序中实现搜索功能,我希望它是“智能”的。搜索成为SQL-query
。
我想要以下功能:搜索'litago'将显示'litago 500ml',litago 375ml','Small litago','superlitago223'
即'ANY_STRING_HERE'+'litago'+'ANY_STRING_HERE'
我想在SQL query
中这样做,
query = 'SELECT * FROM varer WHERE navn LIKE '%?%' '
?
是用户输入,litago
只是示例
但是,这给出了syntax error
。有没有办法做到这一点?
编辑:使用python 3.6.4,这是relevant code
有两种向查询提供数据的方式。真正糟糕的方法是编写字符串:
sql="insert into example values('%s', %d)" % ("string", 8390823904)
cursor.execute(sql)
如果字符串中有任何单引号,则语法无效。另外,这就是SQL注入攻击的发生方式。相反,您应该使用绑定:
sql="insert into example values(?, ?)"
cursor.execute(sql, ("string", 8390823904))
答案 0 :(得分:1)
您不能在由单引号引起来的字符串中使用单引号而不将其转义,但是可以在双引号分隔的字符串中使用。 像
query = "SELECT * FROM varer WHERE navn LIKE '%?%' "
应该解决您的问题。
答案 1 :(得分:0)
我认为您需要简单的like
运算符使用
CREATE TABLE t
(
id int,
Name varchar(100)
);
insert into t values(1, 'litago'),
(2, 'litago 500ml'),
(3, 'Small litago'),
(4, 'litago 375ml'),
(5, 'johb');
postgresql示例,它适用于所有sql
select * from t where name like'%litago%'
此查询的结果
id name
1 litago
2 litago 500ml
3 Small litago
4 litago 375ml
http://sqlfiddle.com/#!17/57ab63/1
在python中,您的陈述应类似于
query = "SELECT * FROM varer WHERE navn LIKE '%?%' "
答案 2 :(得分:0)
这将起作用:
SELECT * FROM varer WHERE navn LIKE '%litago%'