我正在尝试使用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快一点,因为它的内存占用量较小,主要与只读库相关.但它总是将整个工作簿加载到内存中,这可能不是您想要的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。