Я пытаюсь использовать скрипт python, работающий в приложении Heroku, для копирования данных из файла CSV в базу данных Postgres (база данных подключена к указанному приложению Heroku). Проблема, с которой я столкнулся, заключается в том, что Heroku не разрешает доступ суперпользователя к Postgres, и поэтому команда Postgres COPY FROM 'filename' не может быть запущена моим скриптом. Вместо этого я пытался использовать 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)