我正在尝试使用 Python 将 .xlsx 文件中的数据读取到 MySQL 数据库中。
这是我的代码:
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()
不幸的是,openpyxl
的ws.iter_rows()
非常慢。我已经使用 xlrd
和 pandas
模块尝试了类似的方法。还是很慢。有什么想法吗?
最佳答案
您确实需要对您的代码进行基准测试,并提供有关工作表大小和处理它所花费时间的信息。
openpyxl 的只读模式本质上是一种内存优化,避免将整个工作表加载到内存中。在解析 Excel 工作表时,涉及的大部分工作都是将 XML 转换为 Python,这有一些限制。
但是,我确实想到了两个优化:
- 让你的 SQL 语句在循环之外
- 使用
executemany
一次将大量行传递给驱动程序
这些可以组合成类似的东西
INSERT_SQL = "INSERT INTO mytable (name, age…) VALUES (%s, %s, …)"
c.executemany(INSERT_SQL, ws.values)
如果您只想要行的一个子集,那么请考虑使用 itertools.islice
这应该比您当前的代码更快,但您不应该期待奇迹。
就纯性能而言,xlrd 在读取工作表时比 openpyxl 快一点,因为它占用的内存更小,这主要与它是一个只读库有关。但它总是将整个工作簿加载到内存中,这可能不是您想要的。
关于python - 使用 Python 读取 .xlsx 文件的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44765252/