Cara, eu fiz uma rápida pesquisada aqui. Talvez te dê um norte em rumo a solução do seu problema.
Nesse pequeno treco de código foi usado 3 bibliotecas Pandas[1], SQLAlchemy[2] e Reportlab[3].
Código:
import pandas as pd
from sqlalchemy import create_engine
from reportlab.pdfgen import canvas
# Faz a conexão com o banco de dados MySql
conn = create_engine('mysql+pymysql://user:password@ip:port/banco_de_dado_exemplo')
# Query de busca da tabela que você deseja obter os dados
query = 'SELECT * FROM table'
# Ler os dados do seu banco de dados, passando a query de busca e a conexão do banco
df = pd.read_sql(query, conn)
def file_pdf(df_file, filename):
"""
Esta função é para gerar o arquivo em pdf, porém os dados são salvos
de forma desestruturada. A lib reportlab tem a opção de você criar seu
próprio template do seu arquivo em pdf, e assim você personaliza da
forma que reolve seu problema. Neste caso foi apenas para te mostrar
que é possível, não vou adentrar mais nesta lib, não sei também se essa
é a melhor maneira de gerar arquivo pdf usando esse código, mas fica ai
pra você da mais uma estudada sobre essa lib e reformular melhor esse código:D
file --> arquivo que será salvo
filename --> nome do arquivo que será salvo
"""
cnv = canvas.Canvas("{}.pdf".format(filename))
cnv.drawString(150,450, df_file.to_string())
cnv.save()
Exemplo:
file_pdf(df, 'relatorio')
def file_xlsx(df_file, filename):
"""
O propio pandas tem uma opção de salvar seus arquivos em formato .xlsx.
Essa função simplesmente pega seu dados que estão como DataFrame do pandas
transforma esses dados em .xlsx (Excel) em uma varável, e salvo como um arquivo excel.
Detalhe: Você disse que tem várias tabelas para serem processadas, nesta função
esta sendo processando apenas uma tabela do banco, e neste caso, também vou deixar
para você essa tarefa kkk , deve ser fácil, da umas pesquisadas ai que irá conseguir.
Como citei antes foi apenas para te dá um norte da coisa.
df_file --> dataframe que tem os dados do banco
filename --> nome do arquivo que será salvo
"""
writer = pd.ExcelWriter('{}.xlsx'.format(filename))
df_file.to_excel(writer, 'Sheet1')
writer.save()
Exemplo:
file_xlsx(df, 'relatorio')
Com isso espero ter dado pelo menos uma pequena ajuda, desculpem se tem alguma redundância no código ou alguma coisa que tenho escrito de errado, sou iniciante em python e ainda estou em face de aprendizado kkkk. Abraços.
Att,
Igo Barros