具有不同模式的python dataframe to_sql

时间:2018-03-28 20:10:41

标签: python pandas dataframe pandas-to-sql

我想将数据帧存储到现有的MSSQL表中。 Dataframe有3列,但SQL表只有2列。

如何将具有相同名称的2列存储到SQL中?

我尝试了以下代码:

df.to_sql(sTable, engine, if_exists='append')

如果列的数量和名称完全相同,则可行。但我想让我的代码更通用。

2 个答案:

答案 0 :(得分:0)

首先使用正确的架构创建一个数据框:

sql_df = df[['colA', 'colB']]
sql_df.to_sql(sTable, engine, if_exists='append')

Pandas应该具有相当高的内存效率,这意味着列实际上不会重复,它们只会被sql_df引用。您甚至可以重命名列以使其工作。

实现此目的的超级通用方法可能如下所示:

def save_to_sql(df, col_map, table, engine):
    sql_df = pd.DataFrame()
    for old_name, new_name in col_map:
        sql_df[new_name] = df[old_name]
    sql_df.to_sql(table, engine, if_exists='append')

它采用数据帧和一个列表,该列表将哪些列与要调用的列配对,以使它们与SQL表对齐。例如,save_to_sql(my_df, [('colA', 'column_a'), ('colB', 'column_b')], 'table_name', sql_engine)

答案 1 :(得分:0)

这是一个很好的解决方案。现在,我还能够将标题名称转换为SQL字段名称。我必须解决的唯一主题是idex。 DataFrames有一个索引(从0 ... n)。我不需要DB中的字段。但是,我没有找到一种方法来跳过idex列,直到升级到SQL DB。 有人有想法吗?