python - 如何将数据框插入到 Pandas 中的 SQl 服务器数据库中
问题描述
我想将数据框中的整行插入到熊猫的 sql server 中。
我可以使用下面的命令插入,但是,我有 46+ 列并且不想输入所有 46 列。
server = 'server'
database = 'db'
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database)
cursor = cnxn.cursor()
for index, row in df.iterrows():
cursor.execute("INSERT INTO HumanResources.DepartmentTest (DepartmentID,Name,GroupName) values(?,?,?)", row.DepartmentID, row.Name, row.GroupName)
cnxn.commit()
cursor.close()
有没有一种方法可以在不给出列名的情况下插入整行?像这样的东西?
insert into table1
select * from df
我尝试了以下命令,但失败了,
for index, row in df.iterrows():
cursor.execute("INSERT INTO dbo.Staging select row"
)
Error:('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'row'. (207) (SQLExecDirectW); [42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Column name or number of supplied values does not match table definition. (213)")
我不能使用 to_sql,因为我不能在 UAT 或 prod 中导入 sqlalchemy。谁能帮我这个?
解决方案
连同下面的声明提到列名
插入 table1 (col1,col2,...conN) 从 df 中选择 col1,col2,..colN
忽略身份列
推荐阅读
- python-3.6 - 在 Lektor 的动态菜单中使用替代(翻译)标题
- json - Zomato JSON 响应
- ios - Swift XMLMapper 解码嵌套属性
- google-cloud-platform - 不能将 NOT NULL 设置为 ARRAY 类型的列
- c# - 如何显示这种 [h]:mm:ss 格式的时间?
- php - 如何使用 php 或 curl 在 Dropbox 中上传文件
- matrix - Rust 特征:边界可能没有实现,我实现的特征不存在
- java - 有没有办法通过意图从 Android For Work 应用程序启动个人浏览器?
- javascript - 流星集合挂钩更新数组中某个位置的元素
- wagtail - 每组 Wagtail Snippets 权限