我想将Postgres表导出为CSV文件,作为Flask上的下载按钮.如何做到这一点



我的PSQL上有一个表,我想将它作为可下载文件导出给任何点击下载按钮的用户,因此我的路径是不固定的。复制命令在这里对我不起作用。有什么解决方案吗?

@app.route("/")
@roles_required('member')
def index():
return render_template("pages/index.html")
@app.route("/download_csv")
@roles_required('member')
def download_csv():
conn = None
cursor = None
try:
conn = psycopg2.connect("host=localhost dbname=db user=u password=p")
cursor = conn.cursor()

cursor.execute('SELECT id FROM table')
# conn.commit()
result = cursor.fetchall()  # fetchone()
output = io.StringIO()
writer = csv.writer(output)
line = ['column1,column2']
writer.writerow(line)
for row in result:
line = [row[0] + ' , ' + row[1] + ' , ']
writer.writerow(line)
output.seek(0)
return Response(output, mimetype="text/csv",
headers={"Content-Disposition": "attachment;filename=report.csv"})
except Exception as e:
print(e)
finally:
cursor.close()
conn.close()

index.html

...
<a href="{{ url_for('app.download_csv') }}" style="margin-bottom: 10px; margin-left: 10px;" class="btn btn-primary" type="button">
Download Csv  <i class="fa fa-file-csv"></i>
</a>
...

最新更新