im使用python熊猫并将mysql查询存储到数据帧中,然后将结果下载到excel文件中
query = """ ... """
DF= pd.read_sql(query, connection)
writer = pd.ExcelWriter('excel.xlsx',engine='xlsxwriter')
DF.to_excel(writer,'sheet1')
writer.save()
但是当我需要更新文件时,我必须运行SQL查询来检索所有现有数据和新行 现在每次执行可能需要一段时间,并且会使服务器不必要的负载
例如,我有一个100行的excel文件,而数据库有110行 我将运行查询以从数据库中检索第90行到第110行的数据,并使用其他10行更新excel。
谢谢
答案 0 :(得分:0)
检查文件是否存在,然后写入文件
import os
exists = os.path.exists(file) # check if the file already exists
df=pd.read_sql(query, connection) #read the data using limit or offset here
open_mode = None
if exists:
open_mode = 'a'
header = False
else:
open_mode = 'w'
header = True
with open(file, open_mode) as f:
df.to_excel(f, header=header, index=False)
答案 1 :(得分:0)
有几种方法可以做到这一点。首先,您需要在excel中读取数据,即将现有数据加载到数据框中。另一种选择是将指针存储在某个位置,例如,数据帧中的行数或数据库中的最后一个ID(假设您可以使用auto_increment
键),然后相应地修改查询。例如,将最后一个ID(例如1000)存储在文件中。然后阅读并从那里继续前进。
with open('last_id') as f:
last_id = f.read()
sql = "SELECT * FROM `mytable` WHERE `id` > %d" % last_id
或者存储提取数据的大小,然后使用offset syntax。
然后,这只是concatenating两个数据帧(现有+新)的问题。