繁体   English   中英

更新 SQL 记录基于 Pandas DataFrame

[英]Update SQL Records Based on Pandas DataFrame

I have established connection with SQL using below code and have extracted the data from SQL table, converted into dataframe and ran the predictive model. 我生成了 output 并希望根据唯一 ID 列在数据库中单独添加 output 列的值。

server = 'Servername' 
database = 'DBName' 
username = 'username' 
password = 'password' 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

sql ='SELECT * FROM TableName'
DF= pd.read_sql(sql,cnxn)

我在从数据库中检索到的 dataframe 'DF' 中有列 'UniqueID'、'Description'、'Date'、'Predicted'。 我已经预测到 output 'Predicted' 并且在我的 dataframe 中可用。 我只需要根据 UniqueID 覆盖数据库的“预测”列中的值。

请让我知道是否有任何出路,或者我们可以将完整的 dataframe 覆盖到数据库表中。

我发现的最佳方法是利用 SQL 内部连接和临时表来更新值。 如果您需要更新 SQL 中的许多记录,这很有效。

抱歉,如果这里有任何错误,因为我是从我写的 class 借来的。

SQL Cursor

cursor = cnxn.cursor()

# reduce number of calls to server on inserts
cursor.fast_executemany = True

将值插入临时表

# insert only the key and the updated values
subset = DF[['UniqueID','Predicted']]

# form SQL insert statement
columns = ", ".join(subset.columns)
values = '('+', '.join(['?']*len(subset.columns))+')'

# insert
statement = "INSERT INTO #temp_TableName ("+columns+") VALUES "+values
insert = [tuple(x) for x in subset.values]

cursor.executemany(statement, insert)

从临时表更新主表中的值

statement = '''
UPDATE
     TableName
SET
     u.Predicted
FROM
     TableName AS t
INNER JOIN 
     #temp_TableName AS u 
ON
     u.UniqueID=t.UnqiueID;
'''

cursor.execute(statement)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM