Я использую следующий код:
import psycopg2
import pandas as pd
import sys
def pg_load_table(file_path, table_name, dbname, host, port, user, pwd):
'''
This function upload csv to a target table
'''
try:
conn = psycopg2.connect(dbname=dbname, host=host, port=port,\
user=user, password=pwd)
print("Connecting to Database")
cur = conn.cursor()
f = open(file_path, "r")
# Truncate the table first
cur.execute("Truncate {} Cascade;".format(table_name))
print("Truncated {}".format(table_name))
# Load table from the file with header
cur.copy_expert("copy {} from STDIN CSV HEADER QUOTE '\"'".format(table_name), f)
cur.execute("commit;")
print("Loaded data into {}".format(table_name))
conn.close()
print("DB connection closed.")
except Exception as e:
print("Error: {}".format(str(e)))
sys.exit(1)
# Execution Example
file_path = '/tmp/restaurants.csv'
table_name = 'usermanaged.restaurants'
dbname = 'db name'
host = 'host url'
port = '5432'
user = 'username'
pwd = 'password'
pg_load_table(file_path, table_name, dbname, host, port, user, pwd)
Я ожидал, что он добавится к моим данным, но входной файл в итоге заменил мою таблицу. Как я могу отредактировать эту строку:
cur.copy_expert("copy {} from STDIN CSV HEADER QUOTE '\"'".format(table_name), f)
(или больше кода, если необходимо), чтобы команда добавлялась вместо замены? В качестве альтернативы, может ли это поддерживать синтаксис команды update SQL на основе предложения where?