有没有一种方法可以使用pandas用一些新数据更新SQL表中的列?也许是用一个值列表?本质上我想做的是...
1.连接到数据库
1.从数据库中抓取一个表->转换为DataFrame
1.运行脚本以更新该DataFrame的列的值
1.使用新值/新DataFrame更新数据库表
我使用的表很大(> 100,000行)。
我可以完成步骤1、2和3,但我不知道如何完成步骤4并将更新后的值放回数据库表中。
示例脚本
import pandas as pd
import pyodbc as odbc
sql_conn = odbc.connect(<connections tuff>)
query = "SELECT * FROM myTable"
df = pd.read_sql(query, sql_conn)
myNewValueList = [11,12,13,14,15,16,17,18,19,20,….] # long list of new values to update with
df[newColumnValues] = myNewValueList
sql = "UPDATE myTable SET myColumn = %s"
val = df[newColumnValues]
mycursor.execute(sql_conn , val)
字符串
1条答案
按热度按时间m4pnthwp1#
字符串
在上面的代码片段中,将
<connection_stuff>
、<PrimaryKeyColumn>
和myColumn
替换为实际的连接详细信息、主键列和要更新的列。主键用于唯一标识更新的每行。此方法对每一行执行SQL更新,这对于大型数据集可能不是很有效。为了更有效的批量更新,您可能需要考虑pandas的
to_sql
方法。它允许您直接将DataFrame写入SQL表,这比像上面的方法那样单独更新每一行更快,更直接。然而,
to_sql
有其细微差别。它用于将新行插入到数据库中,并且处理更新需要考虑if_exists
参数。因此,您可以做的是将修改后的DataFrame写入数据库中的临时表,从临时表执行更新到实际目标表,最后删除临时表。以下是使用此方法的实现:型
请注意,此方法需要创建一个临时表,这可能需要权限,具体取决于您的数据库设置。