python - 当数据框的列名与 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)
解决方案
我在表之间传输数据时遇到过这种情况,在将数据帧推回 SQL 之前,我使用pandas.DataFrame.rename将一组列映射到另一组列。
因此,例如,假设一个表具有以下列: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
推荐阅读
- c# - 读取所有字节后 TcpListener 挂起
- excel - 使用宏时 VBA ListObject 命名规则不一致(在结尾处加下划线)
- python - 如何将 ansible 脚本与 python 脚本结合起来?
- sql - MSSQL - 获取另一个表中字段中第一个较大值的值
- android - 无法在类中实例化接口侦听器
- visual-studio - 如何使用 Concert CPLEX 在 C++ 中获取变量分支
- ansible - Ansible替换特定文件中的文本块
- powerbi - 如何根据多过滤器报告显示上一个销售期间(会计年度)
- kubernetes - Windows 10 中的 Kubelet
- r - 具有预先指定的截止值和两位小数的 pROC 包