恩,mysql的模糊查询是大家常用的,今天在用python做域名统计的时候,遇到了相当的问题。。。。    主要是  fieldname like “%nima%” ,这语句在mysqldb的模块中会导致被转义。

文章的原文,http://xiaorui.cc/?p=1702  

下面的用法,我估计是大家都会用的…. 在python中,做%s的转义就是%%来解决。。。 如果你这么用了,那么会报错。。。


Traceback (most recent call last):
  File “buzz/lib/data_scan.py”, line 46, in <module>
    print select_mysql_domain(domain,start,end)
  File “buzz/lib/data_scan.py”, line 26, in select_mysql_domain
    cursor.execute(sql, (domain,start_date, end_date))
  File “/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py”, line 201, in execute
    self.errorhandler(self, exc, value)
  File “/usr/local/lib/python2.7/dist-packages/MySQLdb/connections.py”, line 36, in defaulterrorhandler
    raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, “You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘qq.com’%’ and pub_date >’2015-06-29 11:00:00′ and pub_date < ’2015-06-29 12:00:0′ at line 1″)

这是在mysql中操作show processlist;,显示所有正在执行的sql语句。  我们会发现他被莫名的转义了。 

*************************** 271. row ***************************
     Id: 12807984
   User: buzz
   Host: 192.168.1.194:57323
     db: buzz_master
Command: Query
   Time: 3
  State: Sending data
   Info: select count(id) from article where url like “%’qq.com’%” and pub_date >’2015-06-29 11:00:00′ and pu
271 rows in set (0.00 sec)

下面是解决的办法…   因为在python的mysqldb中,他已经会做一些字符的转义. 比如你传进一个字符串,你不需要引起来,因为mysqldb会判断你的字符是否是整形或者是字符串,然后顺手帮你转义. 

*************************** 268. row ***************************
     Id: 12807849
   User: buzz
   Host: 192.168.1.194:57218
     db: buzz_master
Command: Query
   Time: 48
  State: Sending data
   Info: select count(id) from article where url like ‘%qq.com%’ and pub_date >’2015-06-29 11:00:00′ and pub_…….

就这样搞定了….   其实关于mysqldb的模糊查询问题出过好几次,每次都去来来回回的测试才成功,总是记不住,年纪大了,今天就写个博客记录下。 



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!
暂无相关产品

4则回应给“使用python的mysqldb做like模糊查询时遇到的问题”

  1. 歪妖内涵网说道:

    网站不错,雁过留痕,欢迎互访!

  2. 华子说道:

    之前也遇到过,是这样搞的,把% 当成变量,host_ip LIKE ‘%s%s%s’ % (‘%’,search_input,’%')

  3. orangleliu说道:

    这个你都知道了,厉害啊

发表评论