将.xlsx文件加载到MySQL数据库的最快方法
问题描述:
我试图将数据从.xlsx文件导入到SQL数据库中。 现在,我有一个使用的openpyxl和MySQLdb的模块将.xlsx文件加载到MySQL数据库的最快方法
- 建立数据库
- 打开工作簿的连接的python脚本
- 抢工作
- 环通行的中提取我需要的列 并将每条记录逐个插入到数据库中
不幸的是,这是很痛苦的缓慢。我正在处理一个庞大的数据集,所以我需要找到一个更快的方式来完成这个任务(最好使用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()
答
如果它处于打开状态,则禁用自动提交!自动提交是一种让MySQL立即尝试将数据推送到磁盘的功能。如果只有一个插入,这很好,但这会导致每个插入花费很长时间。相反,您可以将其关闭并尝试一次插入数据,只有在您运行完所有插入语句后才提交。
像这样的东西可能会奏效:
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的LOAD DATA INFILE
。这通常是一个非常快的阅读。
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中的自动提交,或者改变您向数据库输入行的确切方式,具体取决于您在现状中所做的操作。 –