我试图将.xlsx文件中的数据导入SQL数据库。 现在,我有一个使用openpyxl和MySQLdb模块的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()
答案 0 :(得分:0)
如果启用,则禁用自动提交! Autocommit是一个使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()
答案 1 :(得分:0)
考虑将工作簿的工作表保存为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()