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