Python и MySQL загрузки данных в CSV - PullRequest
0 голосов
/ 28 сентября 2018

я использую python pandas и сохраняю запросы mysql в кадрах данных, а затем загружаю результаты в файлы Excel

   query = """  ...  """
   DF= pd.read_sql(query, connection)
   writer = pd.ExcelWriter('excel.xlsx',engine='xlsxwriter')
   DF.to_excel(writer,'sheet1') 
   writer.save()

, но когда мне нужно обновить свой файл, мне нужно запустить запрос SQL, чтобы получить все существующиеdata + новые строки теперь это может занять некоторое время каждый раз для выполнения и помещает сервер в ненужную загрузку

, поэтому, например, у меня есть файл Excel с 100 строками, а в БД 110 строк, я бывыполнить запрос для извлечения данных из строки 90 в строку 110 из базы данных и обновить Excel с дополнительными 10 строками

спасибо

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Есть несколько способов сделать это.Прежде всего, вам нужно прочитать данные в Excel, то есть загрузить существующие данные в кадре данных.Другая альтернатива - хранить указатель где-нибудь, например, количество строк в кадре данных или последний идентификатор (предполагая, что ключ auto_increment в вашем распоряжении) из базы данных, а затем соответствующим образом изменить запрос.Например, сохраняя последний идентификатор, скажем, 1000 в файле.Затем прочитайте его и перейдите оттуда.

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

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

В качестве альтернативы сохраните размер извлеченных данных и используйте синтаксис offset .

Тогда это просто вопрос объединяет два кадра данных (существующий + новый).

0 голосов
/ 28 сентября 2018

Проверьте, существует файл или нет, а затем запишите в файл

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...