如何使用 pandas DataFrame 中的新值列表更新 SQL 表列?

问题描述 投票:0回答:1

有没有办法使用 pandas 用一些新数据更新 SQL 表中的列?也许有一个值列表?本质上我想做的是..

  1. 连接数据库
  2. 从数据库中抓取一个表 -> 隐藏到数据框
  3. 运行脚本来更新该数据帧的列的值
  4. 使用新值/新数据框更新数据库表

我正在使用的表很大(> 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)
python pandas pyodbc
1个回答
0
投票
import pandas as pd
import pyodbc as odbc

# Connect to the database
sql_conn = odbc.connect(<connection_stuff>)

# Read the data
query = "SELECT * FROM myTable"
df = pd.read_sql(query, sql_conn)

# Update the DataFrame
myNewValueList = [11, 12, 13, 14, ...]  # Your new values
df['myColumn'] = myNewValueList

# Update statement
sql = "UPDATE myTable SET myColumn = ? WHERE <PrimaryKeyColumn> = ?"

# Update the database
cursor = sql_conn.cursor()
for index, row in df.iterrows():
    cursor.execute(sql, (row['myColumn'], row['<PrimaryKeyColumn>']))

# Commit the changes and close the connection
sql_conn.commit()
cursor.close()
sql_conn.close()

在上面的代码片段中,将

<connection_stuff>
<PrimaryKeyColumn>
myColumn
替换为您的实际连接详细信息、主键列和要更新的列。主键用于唯一标识更新的每一行。

此方法对每一行执行 SQL 更新,这对于大型数据集可能不是很有效。为了更有效的批量更新,您可能需要考虑 pandas 的

to_sql
方法。

© www.soinside.com 2019 - 2024. All rights reserved.