在Heroku上从CSV复制到Postgres数据库

时间:2015-04-21 00:12:01

标签: python csv heroku-postgres

我正在尝试使用在Heroku应用程序上运行的python脚本将数据从CSV文件复制到Postgres数据库(数据库附加到所述Heroku应用程序)。我遇到的问题是Heroku不允许超级用户访问Postgres,因此我的脚本无法运行 COPY FROM'filename' Postgres命令。我尝试过使用 COPY FROM STDIN ,但无济于事。

下面的代码有问题吗?或者或许另一种方法我可以在我的脚本中完成从CSV文件复制到我的Heroku Postgres数据库的任务?在终端中手动运行psql命令不是一个选项,因为重点是自动执行复制过程以使我的数据库保持最新而不用触摸它。

#copysql is a string with the command for copying from the CSV file; newvals is the name of a temporary table I will use for the data imported from the CSV file
copysql = """COPY newvals FROM STDIN (FORMAT csv, NULL 'NULL');"""
#sqlquery is the SQL string for inserting new data found in the temporary table which is created from the CSV import into the existing Postgres database
sqlquery = """INSERT INTO desttable SELECT newvals.id, newvals.column1, newvals.column2 FROM newvals LEFT OUTER JOIN desttable ON (desttable.id = newvals.id) WHERE desttable.id IS NULL;"""

#my CSV file is called 'csvfile' and cur is the database cursor (using psycopg2 and I have already connected to the db elsewhere in my script)
cur.execute("DROP TABLE IF EXISTS newvals;")
cur.execute("CREATE TEMPORARY TABLE newvals AS SELECT * FROM desttable LIMIT 0;")
cur.copy_expert(sql=copysql,file=csvfile)
cur.execute(sqlquery)

1 个答案:

答案 0 :(得分:0)

从Heroku Web界面中获取SQL URL(postgres:// ...)。然后,您可以在本地运行脚本并连接到Heroku Postgres。这就是我解决问题的方法。