我需要查询远程数据库并使用数据编写本地 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])
...
>>>
该文件无效,我当然没有写到正确的位置。但是,我该如何解决这个问题?
答案 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
在本地调用它(当然是经过身份验证的)