Python 是什么原因造成的;TypeError:在字符串格式化过程中未涵盖所有参数";在尝试将数据导入MySQL时?

Python 是什么原因造成的;TypeError:在字符串格式化过程中未涵盖所有参数";在尝试将数据导入MySQL时?,python,mysql,Python,Mysql,我试图将CSV文件导出到MySQL数据库中,但我似乎无法找出代码中的错误。我相信它应该起作用 import csv import MySQLdb mysql_conn = MySQLdb.connect(host='localhost', user='root', passwd='******', db='accounting') mysql_cursor = mysql_conn.cursor() f = open('C:/Users/Pops/Desktop/List of Payees

我试图将CSV文件导出到MySQL数据库中,但我似乎无法找出代码中的错误。我相信它应该起作用

import csv
import MySQLdb

mysql_conn = MySQLdb.connect(host='localhost', user='root', passwd='******', db='accounting')
mysql_cursor = mysql_conn.cursor()

f = open('C:/Users/Pops/Desktop/List of Payees.csv')
csv_f = csv.reader(f)

for row in csv_f:
    mysql_cursor.execute("""INSERT INTO list_of_payees (list_of_payees) VALUES (%s)""", (row[0]))

mysql_conn.commit()
mysql_cursor.close()
错误代码:

Traceback (most recent call last):
  File "C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site-packages\MySQLdb\cursors.py", line 238, in execute
    query = query % args
TypeError: not all arguments converted during string formatting

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/Pops/Desktop/Martin/Programming/Python/ExcelToMySQL.py", line 11, in <module>
    mysql_cursor.execute("""INSERT INTO list_of_payees (list_of_payees) VALUES (%s)""", (row[0]))
  File "C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site-packages\MySQLdb\cursors.py", line 240, in execute
    self.errorhandler(self, ProgrammingError, str(m))
  File "C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site-packages\MySQLdb\connections.py", line 52, in defaulterrorhandler
    raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during string formatting

Process finished with exit code 1
回溯(最近一次呼叫最后一次):
文件“C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site packages\MySQLdb\cursors.py”,执行中第238行
query=查询%args
TypeError:在字符串格式化过程中并非所有参数都已转换
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“C:/Users/Pops/Desktop/Martin/Programming/Python/ExcelToMySQL.py”,第11行,在
mysql\u cursor.execute(““”插入收款人列表(收款人列表)值(%s)”,(第[0]行)
文件“C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site packages\MySQLdb\cursors.py”,第240行,在execute中
errorhandler(self,ProgrammingError,str(m))
文件“C:\Users\Pops\Desktop\Martin\Programming\Python\venv\lib\site packages\MySQLdb\connections.py”,第52行,在defaulterrorhandler中
提高errorclass(errorvalue)
_mysql_exceptions.ProgrammingError:在字符串格式化过程中,并非所有参数都已转换
进程已完成,退出代码为1

Execute的第二个参数表示要转换的对象列表

mysql\u游标。执行(““插入收款人列表(收款人列表)值(%s)”,(行[0])

这一行是问题所在,因为
行[0]
应该是一个列表

您可以尝试使用
mysql\u cursor.execute(“插入收款人列表(收款人列表))值'%s',[row[0]])


或者,您也可以尝试在行值
mysql\u光标的末尾添加逗号。execute(“插入收款人列表(收款人列表))值“%s”(行[0],)

execute的第二个参数表示要转换的对象列表

mysql\u游标。执行(““插入收款人列表(收款人列表)值(%s)”,(行[0])

这一行是问题所在,因为
行[0]
应该是一个列表

您可以尝试使用
mysql\u cursor.execute(“插入收款人列表(收款人列表))值'%s',[row[0]])

或者,您也可以尝试在行值
mysql\u光标的末尾添加逗号。执行(“插入收款人列表(收款人列表))值“%s”(行[0],)

是将csv文件上载到mysql表的更快更好的方法,读取csv并插入mysql表是一个缓慢且耗时的过程。使用MYSQLdb从python执行此命令

示例查询:

LOAD DATA INFILE '/path_of_csv_file/sampledata.csv' 
INTO TABLE expenses  
    FIELDS TERMINATED BY ',' 
           OPTIONALLY ENCLOSED BY '"'
    LINES  TERMINATED BY '\n' -- or \r\n
(column1, column2, column3, column4, column5)
将csv文件上传到MYSQL表是一种更快更好的方法,读取csv并插入MYSQL表是一个缓慢且耗时的过程。使用MYSQLdb从python执行此命令

示例查询:

LOAD DATA INFILE '/path_of_csv_file/sampledata.csv' 
INTO TABLE expenses  
    FIELDS TERMINATED BY ',' 
           OPTIONALLY ENCLOSED BY '"'
    LINES  TERMINATED BY '\n' -- or \r\n
(column1, column2, column3, column4, column5)

非常感谢你的建议非常感谢你的建议谢谢你第二个有用。虽然我相信
'%s'
应该是
(%s)
谢谢你,但是第二个是有效的。虽然我相信
'%s'
应该是
(%s)