python和mysql将数据下载到csv中

时间:2018-09-28 13:15:50

标签: python mysql excel pandas

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。

谢谢

2 个答案:

答案 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两个数据帧(现有+新)的问题。