python TypeError: not all arguments converted during string formatting解决办法

新浪云想钱想疯了,开始收mysql租金,一个应用一年175元,一天免费10W条读写。此外账户还收取年费36.5元。于是把新浪云的SAE迁移到阿里云ECS上。迁移一个python应用的时候出现这个问题:

TypeError: not all arguments converted during string formatting

对应代码是

sql = '''select * from strategy where user_id=%s'''
param = (user_id)
cursor.execute(sql, param) # TypeError: not all arguments converted during string formatting

网上搜了一下,发现是param没有被识别为元组。原文解释如下:

% 操作符的第二个操作对象如果不是一个元组,那么它就只格式化一个值,否则它尝试把元组里每个值都单独格式化。你不可以同样是给它一个元组,有些时候要它当成多个值来格式化,另一些时候又把它当成单一的要格式化的值。实在不习惯可以用 str 的 .format 方法代替。另外,(b) 不是只包含一个元素 b 的元组,那个括号只是用于提升表达式的优先级,就像 (1 * 2) + 3 和 (2,) + 3 不一样类似。

也就是把param改为(user_id, )即可。

But,

在新浪云上这个写法是可以的,也许库版本不同吧。(python版本SAE 2.7.9,阿里云2.7.6)

版权所有,转载请注明出处:
http://sickworm.com/?p=136

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据