【发布时间】:2014-02-12 21:43:35
【问题描述】:
运行此脚本时:
#! /usr/bin/env python
import MySQLdb as mdb
import 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 有点陌生,所以这可能是一个明显的问题。
【问题讨论】:
-
不需要/不想引用您的查询参数。
-
即
cur.execute( "SELECT * FROM records WHERE email LIKE %s", [search]) -
我在使用python2.7时遇到了这个问题,但是在使用python2.6时是正确的。你知道原因吗?
-
在将我们服务器上的 Ubuntu 从 14.x 升级到 16.x 后,我也遇到了这个问题。有人可以在这里解释版本依赖关系吗?那真的很有帮助。
标签: python python-2.7