python和mysql将数据下载到csv中

esbemjvw  于 2021-06-19  发布在  Mysql
关注(0)|答案(2)|浏览(339)

我使用python将mysql查询存储到dataframes中,然后将结果下载到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文件,db有110行,我会运行一个查询,从数据库的第90行到第110行检索数据,并用额外的10行更新excel
谢谢

polhcujo

polhcujo1#

有几种方法可以做到这一点。首先,您需要读取excel中的数据,即在数据框中加载现有数据。另一种方法是将指针存储在某处,例如Dataframe中的行数或最后一个id(假设 auto_increment ,然后相应地修改查询。例如,在一个文件中存储最后一个id,比如1000。然后读它,从那里继续。

with open('last_id') as f:
    last_id = f.read()

sql = "SELECT * FROM `mytable` WHERE `id` > %d" % last_id

或者存储提取数据的大小并使用偏移量语法。
然后就是连接两个Dataframe(现有+新)的问题。

pjngdqdw

pjngdqdw2#

检查文件是否存在,然后写入文件

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)

相关问题