Heroku shell。在本地写一个csv文件

时间:2015-11-25 20:38:14

标签: python csv heroku

我需要查询远程数据库并使用数据编写本地 csv文件。我试过这段代码:

heroku run python manage.py shell

>>> from libros.models import LibrosDisponibles
>>> x = LibrosDisponibles.objects.all()
>>> 
>>> import csv
>>> with open("librosd_backup.csv", "wb") as f:
...   e = csv.writer(f, quoting=csv.QUOTE_ALL)
...   for l in x:
...     e.writerow([l.perfil, l.libro])
... 
>>> 

该文件无效,我当然没有写到正确的位置。但是,我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

快速而又脏,而不是完全通过heroku run:通过pg:psql执行SQL语句,并使用COPY命令。例如。 heroku pg:psql -c 'copy my_table to stdout with csv header' > my_table.csv。为报告和其他分析生成数据的快速方便的方法。您可以使用表名或完整的sql语句(例如copy (select foo, bar from baz) to stdout with csv header)。

有关COPY的信息,请参阅http://www.postgresql.org/docs/9.3/static/sql-copy.html。你可能想知道你是否可以使用'to filename '版本的电话......你做不到。文件名在数据库服务器上定义,您无权访问。

如果你需要尊重Python逻辑的某些方面,你可以 -

1)编写本地脚本并使用heroku pg:credentials设置DATABASE_URL (实际上,不要这样做 - 如果您忘记取消DATABASE_URL错误事情可以会发生......)

2)编写一个API端点,执行您编写的代码并直接流式传输(参见https://docs.djangoproject.com/en/1.9/howto/outputting-csv/),以便您可以通过cURL在本地调用它(当然是经过身份验证的)