首页 > 解决方案 > 当数据框的列名与 sql server 表列名不同时使用 sqlalchemy to_sql

问题描述

我有一个上传到 SQL 服务器表的数据框。我正在使用 sqlalchemy 和 to_sql 方法。

数据完美上传到表中。目前我已经设计了它,以便我的数据框和 sql 表中的列名是相同的。但是我想知道是否需要这样做?有没有一种方法,当您的数据框与 sql 表具有不同的列名时,您可以指定一些映射?还是您只是简单地重命名数据框中的列名?

from sqlalchemy import create_engine
engine = create_engine(engine_str)
conn = engine.connect()
df.to_sql(tbl_name, conn, if_exists='append', index=False)

标签: pythonpandasdataframesqlalchemy

解决方案


我在表之间传输数据时遇到过这种情况,在将数据帧推回 SQL 之前,我使用pandas.DataFrame.rename将一组列映射到另一组列。

因此,例如,假设一个表具有以下列:NameIPAddressFolder

你的第二个表有列:nameipfolder

您可以使用 sqlalchemy 将第一个表读入数据框中:

source_data = pd.read_sql_table(source_table, con=engine)

然后创建一个转换字典来转换列:

conv_dict = {
'Name': 'name',
'IPAddress': 'ip',
'Folder': 'folder'
}

# convert the columns into a new datframe
new_df = source_data.rename(columns=conv_dict)

现在,您可以将具有转换列的新数据框放入第二个表中:

new_df.to_sql(dest_table, con=engine, if_exists='append', index=False)

来源:https ://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.rename.html


推荐阅读