我想将数据框存储到现有的 MSSQL 表中。Dataframe 有 3 列,但 SQL 表只有 2 列。
如何将具有相同名称的 2 列存储到 SQL 中?
我尝试了以下代码:
df.to_sql(sTable, engine, if_exists='append')
如果列的数量和名称完全相同,它就可以工作。但我想让我的代码更通用。
我想将数据框存储到现有的 MSSQL 表中。Dataframe 有 3 列,但 SQL 表只有 2 列。
如何将具有相同名称的 2 列存储到 SQL 中?
我尝试了以下代码:
df.to_sql(sTable, engine, if_exists='append')
如果列的数量和名称完全相同,它就可以工作。但我想让我的代码更通用。
这是一个很好的解决方案。现在,我还能够将标题名称转换为 SQL 字段名称。我必须解决的唯一主题是 idex。DataFrames 确实有一个索引(从 0...n)。我不需要数据库中的字段。但是,我没有找到通过上传到 SQL DB 来跳过 idex 列的方法。有人有想法吗?
首先创建一个具有正确模式的数据框:
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)