想实现mysql中的单个参数过滤任务应该怎么写?,mysql怎么写,使用python执行my
想实现mysql中的单个参数过滤任务应该怎么写?,mysql怎么写,使用python执行my
使用python执行mysql,报错了:
name = "AAA'A"cursor.execute('select * from tb where name=%s',name)cursor.execute('select * from tb where name=%s',(name))
都会报错
query = query % tuple([db.literal(item) for item in args])TypeError: not all arguments converted during string formatting
但是以下不会报错:
name = "AAA'A"cursor.execute('select * from tb where name=%s and %s',(name,1))
python27 如何过滤mysql 单个参数
因为题主并未提及连接数据库用的哪个库,所以假设你使用的是mysqldb。
可以看一下mysqldb的源码:
...def execute(self, query, args=None): """ ... args -- optional sequence or mapping, parameters to use with query. ... """ if args is not None: # 首先判断args是否为字典类型 if isinstance(args, dict): # 以k-v形式填入查询语句中。 query = query % dict((key, db.literal(item)) for key, item in args.iteritems()) # 当args为非字典类型时 else: # 遍历args, 最后生成一个元组填入查询语句中。 query = query % tuple([db.literal(item) for item in args]) ...
可以看到,args参数为一个可选的序列或者映射,即args参数的期望类型是list或者tuple。
那么回头再看一下你给的输入参数:
>>> name = 'test'>>> type(name)<type 'str'>>>> type((name))<type 'str'>>>> type(('name', 1))<type 'tuple'>
所以,解决方法很简单:
>>> type((name, ))<type 'tuple'>>>> cursor.execute('select * from tb where name=%s',(name, ))1L
这里就涉及到一个小细节。
当创建只有一个元素的元组时,需要加一个逗号,否则解释器会当作一个字符串创建。
cursor.execute('select * from tb where name="%s"',name)
编橙之家文章,
相关内容
- 关于安装Python Flask-MySQLdb的问题,,在mac上安装使用pip
- Python能做到文件跟踪吗?用什么方法实现,python能做到
- 求Pyqt 函数threading.Thread,print()阻塞解决方法,,我现在
- 想用Python与个判断Zip压缩是否成功的脚本求思路,pyt
- python2.7无法输出print是因为我用了reload(sys)吗?,python2
- 求大牛帮优化一段python代码关于循环里重复select相关操
- Python模拟登录知乎,遇到403: Forbidden问题,pythonforbidden
- 循环执行函数时间时区准确性很重要吗?,时区准确性
- python splinter奇葩问题No module named browser,pythonsplinter,最
- Python如何实现对齐输出,python实现对齐,输出格式:aa
评论关闭