获取类型错误 TypeError:在字符串格式化过程中未转换所有参数 python

1 投票
1 回答
2376 浏览
提问于 2025-04-18 08:42

我正在把一个.xls文件里的特定数据导入到mysql数据库中。在这个过程中,我遇到了以下错误。

我的.py文件内容如下

import xlrd
import MySQLdb
book = xlrd.open_workbook("Sheet2.xls")
sheet = book.sheet_by_name("Sheet1")
database = MySQLdb.connect (host="localhost", user="root", passwd="", db="dtz_new")
cursor = database.cursor()
query = """INSERT INTO property_property(name) VALUES(%s)"""
for r in range(1, sheet.nrows):
    gaurav      = sheet.cell(r,1).value
    values = (gaurav)
    cursor.execute(query, values)
cursor.close()
database.commit()
database.close()
print "all done, Bye for now"
columns = str(sheet.ncols)
rows = str(sheet.nrows)
print "I just imported "+ columns+ " columns and "+ rows+" rows to MySQL!"

我遇到的错误是这个

Traceback (most recent call last):
  File "dtz_db.py", line 29, in <module>
    cursor.execute(query, values)
  File "c:\Python27\lib\site-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

单元格(1,1)的值是Kunjvihar,这是在Python中一个字符字段的名字。请帮我解决这个问题。

1 个回答

5

你需要把 values 变成一个真正的元组:

values = (gaurav,)

注意那里的 逗号;仅仅用括号只是为了把你的表达式分组,真正让它成为元组的是逗号。

如果没有逗号,你就只有一个字符串值,这也是一种序列。这样一来,MySQL 就会尝试只插入单个字符,而你的字符串值里有多个字符。因为多出来的字符,系统就会抛出一个异常。

撰写回答