Python 将.xlsx文件加载到MySQL数据库的最快方法

Python 将.xlsx文件加载到MySQL数据库的最快方法,python,mysql,excel,Python,Mysql,Excel,我正在尝试将数据从.xlsx文件导入SQL数据库。 现在,我有一个python脚本,它使用openpyxl和MySQLdb模块 建立与数据库的连接 打开工作簿 抓起工作表 循环浏览工作表中的行,提取我需要的列 并将每条记录逐一插入数据库 不幸的是,这是痛苦的缓慢。我正在处理一个庞大的数据集,因此我需要找到一种更快的方法来完成这项工作(最好是使用Python)。有什么想法吗 wb = openpyxl.load_workbook(filename="file", read_only=True)

我正在尝试将数据从.xlsx文件导入SQL数据库。 现在,我有一个python脚本,它使用openpyxl和MySQLdb模块

  • 建立与数据库的连接
  • 打开工作簿
  • 抓起工作表
  • 循环浏览工作表中的行,提取我需要的列 并将每条记录逐一插入数据库
不幸的是,这是痛苦的缓慢。我正在处理一个庞大的数据集,因此我需要找到一种更快的方法来完成这项工作(最好是使用Python)。有什么想法吗

wb = openpyxl.load_workbook(filename="file", read_only=True)
ws = wb['My Worksheet']

conn = MySQLdb.connect()
cursor = conn.cursor()

cursor.execute("SET autocommit = 0")

for row in ws.iter_rows(row_offset=1):
     sql_row = # data i need
     cursor.execute("INSERT sql_row")

conn.commit() 

如果自动提交处于启用状态,则禁用自动提交!Autocommit是一个使MySQL立即尝试将数据推送到磁盘的函数。如果只有一个insert,这是很好的,但是这会导致每个insert花费很长时间。相反,您可以关闭它并尝试一次插入所有数据,仅在运行所有insert语句后提交

类似的方法可能会奏效:

con = mysqldb.connect(
                    host="your db host",
                    user="your username",
                    passwd="your password",
                    db="your db name"
                 )
con.execute("SET autocommit = 0")
cursor = con.cursor()
data = # some code to get data from excel
for datum in data:
    cursor.execute("your insert statement".format(datum))

con.commit()
con.close()

考虑将工作簿的工作表保存为CSV,然后使用MySQL。这通常是一个非常快速的阅读

sql = """LOAD DATA INFILE '/path/to/data.csv' 
         INTO TABLE myTable  
         FIELDS TERMINATED BY ',' 
         OPTIONALLY ENCLOSED BY '\"'
         LINES TERMINATED BY '\n'"""  

cursor.execute(sql)
con.commit()

您可以包含当前代码的示例片段吗?您使用的是什么版本的SQL?该解决方案可能会关闭SQL中的自动提交功能,或者改变您在数据库中输入行的确切方式,具体取决于您在现状中所做的工作。谢谢您的帮助。插入速度稍快,但仍需要几分钟才能完成(我的数据集有200000多行)。还有其他建议吗?你能在你原来的帖子里写下你的代码吗?这是我最好的猜测,但如果我们看到您的代码,可能会有更明显的东西!可以如上所述。@Brinley,你能在自动提交设置后立即调用
con.commit()
,看看这是否加快了速度吗?还是很慢。