为了账号安全,请及时绑定邮箱和手机立即绑定

Python MySQLdb TypeError:并非在字符串格式化期间转换所有参数

Python MySQLdb TypeError:并非在字符串格式化期间转换所有参数

繁星点点滴滴 2019-08-28 10:59:47
Python MySQLdb TypeError:并非在字符串格式化期间转换所有参数运行此脚本时:#! /usr/bin/env pythonimport MySQLdb as mdbimport sys     class Test:     def check(self, search):         try:             con = mdb.connect('localhost', 'root', 'password', 'recordsdb');             cur = con.cursor()             cur.execute( "SELECT * FROM records WHERE email LIKE '%s'", search )             ver = cur.fetchone()             print "Output : %s " % ver        except mdb.Error, e:             print "Error %d: %s" % (e.args[0],e.args[1])             sys.exit(1)         finally:                 if con:                     con.close()test = Test()test.check("test")我得到一个错误:./lookup  Traceback (most recent call last):   File "./lookup", line 27, in <module>     test.check("test")   File "./lookup", line 11, in creep     cur.execute( "SELECT * FROM records WHERE email LIKE '%s'", search )   File "/usr/local/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 187, in execute     query = query % tuple([db.literal(item) for item in args])TypeError: not all arguments converted during string formatting我不明白为什么。我正在尝试进行参数化查询,但这只不过是一种痛苦。我对Python有些新意,所以这可能是一个明显的问题。
查看完整描述

3 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

而不是这个:

cur.execute( "SELECT * FROM records WHERE email LIKE '%s'", search )

试试这个:

cur.execute( "SELECT * FROM records WHERE email LIKE %s", [search] )

请参阅MySQLdb 文档。原因是execute第二个参数表示要转换的对象列表,因为在参数化查询中可以有任意数量的对象。在这种情况下,你只有一个,但它仍然需要是一个可迭代的(一个元组而不是一个列表也可以)。


查看完整回答
反对 回复 2019-08-28
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

你可以试试这段代码:

cur.execute( "SELECT * FROM records WHERE email LIKE '%s'", (search,) )

你可以看到文档


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 972 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信