![](/img/trans.png)
[英]How to load a large CSV file to Postgresql RDS in AWS using Python3
[英]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.