使用to_sql将数据附加到pandas中已存在的表中

时间:2017-01-27 13:34:33

标签: python pandas pandas-to-sql

我有以下数据框

ipdb> csv_data
  country    sale        date  trans_factor
0   India  403171  12/01/2012             1
1  Bhutan  394096  12/01/2012             2
2   Nepal   super  12/01/2012             3
3  madhya  355883  12/01/2012             4
4   sudan     man  12/01/2012             5

截至目前我正在使用下面的代码在表中插入数据,就像表已经存在一样,删除它并创建新表

csv_file_path = data_mapping_record.csv_file_path
original_csv_header = pandas.read_csv(csv_file_path).columns.tolist()
csv_data = pandas.read_csv(csv_file_path, skiprows=[0], names=original_csv_header, infer_datetime_format=True)
table_name = data_mapping_record.csv_file_path.split('/')[-1].split('.')[0]
engine = create_engine(
    'postgresql://username:password@localhost:5432/pandas_data')

# Delete table if already exits
engine.execute("""DROP TABLE IF EXISTS "%s" """ % (table_name))

# Write the pandas dataframe to database using sqlalchemy and pands.to_sql
csv_data_frame.to_sql(table_name, engine, chunksize=1000)

但我需要的是,如果不删除表,如果表已经存在,只需将数据附加到已存在的表中,pandas to_sql方法有什么办法吗?

1 个答案:

答案 0 :(得分:14)

IIUC您只需使用if_exists='append'参数:

[1] = "Not Training"

来自docs

  

if_exists :{'fail','replace','append'},默认'失败'

     

失败:如果   表存在,什么都不做。

     

replace:如果表存在,则删除它,重新创建   它,并插入数据。

     

追加:如果表存在,则插入数据。创建if   不存在。