当数据框的列名与 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。
因此,例如,假设一个表具有以下列:Name、IPAddress、Folder
您的第二个表有以下列:name、ip、folder
您可以使用 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的主要内容,如果未能解决你的问题,请参考以下文章