簡體   English   中英

使用Python將大型csv文件上傳到AWS中的Postgres RDS

[英]Using Python to upload large csv files to Postgres RDS in AWS

使用 Python 將大型 csv 文件加載到 AWS 中的 Postgres RDS 數據庫的最簡單方法是什么?

為了將數據傳輸到本地 postgres 實例,我之前使用了psycopg2連接來運行 SQL 語句,例如:

COPY my_table FROM 'my_10gb_file.csv' DELIMITER ',' CSV HEADER;

但是,當對遠程 AWS RDS 數據庫執行此操作時,會產生錯誤,因為.csv文件在我的本地計算機上而不是數據庫服務器上:

ERROR: must be superuser to COPY to or from a file
SQL state: 42501
Hint: Anyone can COPY to stdout or from stdin. psql's \copy command also works for anyone.

這個答案解釋了為什么這不起作用。

我現在正在尋找使用psql自動執行此操作的 Python 語法。 我有大量的.csv文件需要上傳,因此我需要一個腳本來自動執行此操作。

首先,您需要像往常一樣使用CREATE TABLE SQL 語句在 RDS Postgres 中創建表定義。

然后你需要像這樣運行一個psql語句:

psql -p 5432 --host YOUR_HOST --username YOUR_USERNAME --dbname YOUR_DBNAME --command "\copy my_table FROM 'my_10gb_file.csv' DELIMITER ',' CSV HEADER"

在 Python 中,我們可以按如下方式設置並執行它:

host = "YOUR_HOST"
username = "YOUR_USERNAME"
dbname = "YOUR_DBNAME"

table_name = "my_table"
file_name = "my_10gb_file.csv"
command = "\copy {} FROM '{}' DELIMITER ',' CSV HEADER".format(table_name, file_name)

psql_template = 'psql -p 5432 --host {} --username {} --dbname {} --command "{}"'

bash_command = psql_template.format(host, username, dbname, command.strip())

process = subprocess.Popen(bash_command, stdout=subprocess.PIPE, shell=True) 

output, error = process.communicate()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM