从烧瓶sqlalchemy下载CSV

时间:2020-10-09 08:06:59

标签: python-3.x sqlite flask flask-sqlalchemy

如果要全部下载,我有一个名为/showall的路由页面,其中显示来自sqlite3 DB的所有几行以及一个名为“下载CSV”的按钮。

我的display.html如下所示:

<a href="/download/{{ value }}" target="blank"><button>Download CSV
                        <i class="zmdi zmdi-arrow-right"></i>
                    </button></a>

我的app.py如下所示:

@app.route('/showall', methods=["GET"])
def showall():
    title = "Display"
    data = database.get_all(Registers)
    with open('/tmp/download.csv', 'w') as f:
        out = csv.writer(f, delimiter=',', quotechar='"', quoting=csv.QUOTE_MINIMAL)
        header = Registers.__table__.columns.keys()
        out.writerow(header)

        for rec in data:
            out.writerow([getattr(rec, c) for c in header])

    return render_template("display.html", title=title, data=data, value='download.csv')


@app.route('/download/<file_name>')
def download(file_name):
    try:
        return send_file("/tmp/" + file_name,
                         attachment_filename='all_register.csv',
                         as_attachment=True)
    except Exception as e:
        return str(e)

/showall页面打开后,我将鼠标悬停在“下载”按钮上,我可以看到重定向链接为/download/download.csv,但是单击按钮后,一切都没有。

但是奇怪的是,如果我转到showall的页面源并单击页面源中的链接,则它将下载csv。 如何解决此问题以及页面中缺少的内容?

1 个答案:

答案 0 :(得分:0)

<form action="/showall" enctype="multipart/form-data" method="get">
<a href="/download/{{ value }}" target="blank"><button>Download CSV
                        <i class="zmdi zmdi-arrow-right"></i>
                    </button></a>
</form>