Generate Excel with SQLALCHEMY and Pandas

Question:

I am trying to export the result of my query made with SQLALCHEMY.
I am able to download the file, but the columns I receive, don’t have the header names, and are not complete.
Here I join an image of what I receive:
enter image description here
But my database have this format:
enter image description here

@app.route('/excel', methods=['GET', 'POST'])
def exportexcel():
    data = Data.query.all()
    df = pd.DataFrame(list(data))
    filename = app.config['UPLOAD_FOLDER']+"/autos.xlsx"
    print("Filename: "+filename)

    writer = pd.ExcelWriter(filename)
    df.to_excel(writer, sheet_name='Registrados')
    writer.save()

    return send_file(filename)

Someone know how could I do to retrieve my database as similar as possible in the excel.

Asked By: Jonathan Prieto

||

Answers:

def to_dict(row):
    if row is None:
        return None

    rtn_dict = dict()
    keys = row.__table__.columns.keys()
    for key in keys:
        rtn_dict[key] = getattr(row, key)
    return rtn_dict


@app.route('/excel', methods=['GET', 'POST'])
def exportexcel():
    data = Data.query.all()
    data_list = [to_dict(item) for item in data]
    df = pd.DataFrame(data_list)
    filename = app.config['UPLOAD_FOLDER']+"/autos.xlsx"
    print("Filename: "+filename)

    writer = pd.ExcelWriter(filename)
    df.to_excel(writer, sheet_name='Registrados')
    writer.save()

    return send_file(filename)
Answered By: KiDoo Song

U can get data directly with sqlalchemy:

    data = session.execute(
        select(Data.id_auto, Data.modelo, Data.foto, Data.documentacion).
    ).all()

    df = pd.DataFrame(data)
    filename = 'data.xlsx'

    writer = pd.ExcelWriter(filename)
    df.to_excel(writer, index=False)
    writer.save()
Answered By: Mihail Lalyko