1
ErenJaeger 2021-12-15 13:59:15 +08:00
MySQL 正则还真没用过,可以用模糊查询 like
|
2
peonone 2021-12-15 15:41:25 +08:00 1
试试
self.cursor.execute('select * from goods where name regexp %s',[f".*{goods_name}.*",]) |
3
gossip OP @peonone 正解了,想问下大佬,这个问题出在哪了呀,为啥里面有双引号就不行呢?
另外您的写法从哪里看到的,我谷歌了一上午没找到好的方法 |
4
dayeye2006199 2021-12-16 03:44:20 +08:00
您这自己拼 SQL ,眼看着要被注入攻击的感觉;用 prepared statement 把
|
5
peonone 2021-12-16 11:26:47 +08:00 1
@gossip 在 SQL 字符串里%s 需要是一个完整的参数值代位符,".*%s.*"这样是不行的。
我也没找到相关的文档,从我的经验来的:) @dayeye2006199 只有被注释的前两行是拼 SQL 的方式,LZ 想解决的问题就是在使用 prepared statement 了。 但还是要注意会把用户输入的内容当作正则来处理,比如用户输入".*",会匹配任意字符 |
6
gossip OP @peonone 感谢啦,您说得没错,觉得这个问题这么解决还不是办法。不过也是没接触过前端,写了个增删改查 sql 的小程序练练手,只有后端的 python 代码。本来想用查询先都把结果干出来,然后 python 对结果进行正则的,后来想了下,觉得这样效率不高,还是放在数据库端了在查询的时候做了匹配。
不知道真的生产环境下该怎么处理这种问题呢? |
7
peonone 2021-12-16 14:53:13 +08:00
真实环境下这种场景不会使用正则去查询数据库的,效率太低,需要扫描整个表,对每行的商品名做正则匹配,IO 和 CPU 消耗都很高,一种解决办法是使用检索引擎,比如 ElasticSearch ,MySQL 也有全文检索功能 https://dev.mysql.com/doc/refman/8.0/en/fulltext-search.html ,可以用来实现个简单原型试试。
|