【问题标题】:python dataframe to_sql with different schema具有不同模式的python数据框to_sql
【发布时间】:2018-03-28 20:10:41
【问题描述】:

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

如何将同名的 2 列存储到 SQL 中?

我尝试了以下代码:

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

如果列的数量和名称完全相同,它就可以工作。但我想让我的代码更通用。

【问题讨论】:

    标签: python pandas dataframe pandas-to-sql


    【解决方案1】:

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

    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)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-16
        • 1970-01-01
        • 1970-01-01
        • 2021-01-15
        • 2023-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多