当数据框的列名与 sql server 表列名不同时使用 sqlalchemy to_sql

Posted

技术标签:

【中文标题】当数据框的列名与 sql server 表列名不同时使用 sqlalchemy to_sql【英文标题】:using sqlalchemy to_sql when dataframe has different column names to sql server table column names 【发布时间】:2020-05-09 11:17:32 【问题描述】:

我有一个上传到 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)

【问题讨论】:

这是个好问题,你找到答案了吗? 【参考方案1】:

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

因此,例如,假设一个表具有以下列: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

【讨论】:

以上是关于当数据框的列名与 sql server 表列名不同时使用 sqlalchemy to_sql的主要内容,如果未能解决你的问题,请参考以下文章

Sql Server多表查询

sql server中使用sql语句修改列名

在何时访问数据框的列名

SQL Server增删改查语句

sql server修改列名语句

sql server 2008中列名外的中括号去除不掉