【问题标题】:python2.7 TypeError: not all arguments converted during string formattingpython2.7 TypeError:字符串格式化期间并非所有参数都转换
【发布时间】:2017-08-30 12:51:52
【问题描述】:
#endcding=utf-8
import MySQLdb
conn = MySQLdb.connect{
    host='localhost'
    port=3306,   
    user='root', 
    passwd='admin
    db='db01',   
    charset='utf8
    )            
cur = conn.cursor()
count = cur.execute("select * from t_r_def_audit")
results = cur.fetchmany(count)
provcode = cur.execute("select * from t_r_params where 
param_tag='PROVINCE_CODE' and param_code not in(1,95,99)")
provResults = cur.fetchmany(provcode)
i = 0
sql = "insert into ti_r_audit values({0},{1},{2},{3})"
values = "["
for result in results:
i = i+1
prev = result[8]
audit_id = result[0]
if(prev == "1"):
    prov = 31
    for index in range(prov):
        values =values + "("+str(i)+","+audit_id+",'"+provResults[index]
     [0]+"',0),"
        i = i+1
elif prev=="0":
    values =values + "("+str(i)+","+audit_id+",'"+provResults[31][0]+"',0),"
values = values + "]"
cur.executemany(sql,values)
cur.close
conn.commit()
conn.close()

手动拼接sql的参数,可以执行多次sql执行,但是执行完脚本会报错 错误如下

λ python audit.py
Traceback (most recent call last):
File "audit.py", line 34, in <module>
cur.executemany(sql,values)
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 255, in 
 executemany
self.errorhandler(self, TypeError, msg)
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in 
 defaulterrorhandler
raise errorclass, errorvalue
TypeError: not all arguments converted during string formatting

自己手动写了个参数,没有发现错误,说明脚本应该没问题,问题可能出在拼接sql参数上,但是没发现哪里有问题

【问题讨论】:

标签: python mysql python-2.7 python-2.x


【解决方案1】:

你的代码乱七八糟,但是一行

sql = "insert into ti_r_audit values({0},{1},{2},{3})"

最终需要被称为类似于

的东西
sql.format('first', 'second', 'third', 'forth')

所以请确保您的列表 values 在您调用时包含 4 个值:

cur.executemany(sql,values)

否则你会看到错误:

TypeError: not all arguments converted during string formatting

更新:

为了调试,可以插入以下行:

print(sql.format(*values))

在运行之前

cur.executemany(sql,values)

【讨论】:

  • 对不起,代码不完整。我的参数是拼接部分,values是部分参数,我打印出来,确实是每行四个参数
  • 检查我的更新并确保您的所有 SQL 语句都完好无损
  • 还是报错,打印出金额“insert into ti_r_audit values([,(,1,,)”
猜你喜欢
  • 2020-08-23
  • 2015-10-28
  • 2015-01-21
  • 2013-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
相关资源
最近更新 更多