我有一个API服务,在此服务中,我正在将pandas数据框结果写入SQL Server。
但是当我想向表中添加新值时,我无法添加。我使用了append选项,因为在文档中说它向数据框添加了新值。我没有使用replace选项,因为我不想每次都删除表。
我需要在保留旧值的同时向数据库表发送新值。
除了熊猫to_sql
方法外,我还研究了其他方法或方式,但是到处都只能看到熊猫。
有人对此有想法吗?
谢谢。
我有一个API服务,在此服务中,我正在将pandas数据框结果写入SQL Server。
但是当我想向表中添加新值时,我无法添加。我使用了append选项,因为在文档中说它向数据框添加了新值。我没有使用replace选项,因为我不想每次都删除表。
我需要在保留旧值的同时向数据库表发送新值。
除了熊猫to_sql
方法外,我还研究了其他方法或方式,但是到处都只能看到熊猫。
有人对此有想法吗?
谢谢。
您应确保您的pandas数据框具有正确的结构,其中键是您的mysql列名,数据在列表中:
df = pd.DataFrame({"UserId":["rrrrr"],"UserFavourite":["Greek Salad"],"MonthlyOrderFrequency":[5],"HighestOrderAmount":[30],"LastOrderAmount":[21],"LastOrderRating":[3],"AverageOrderRating":[3],"OrderMode":["Web"],"InMedicalCare":["No"]})
与您的数据库建立正确的连接。就我而言,我正在127.0.0.1连接到本地数据库并“使用演示;”:
sqlEngine = create_engine('mysql+pymysql://root:@127.0.0.1/demo',pool_recycle=3600)
dbConnection = sqlEngine.connect()
最后,输入表名,我的表名为“ UserVitals”,然后尝试在try-except块中执行以处理错误:
try:
df.to_sql("UserVitals",con=sqlEngine,if_exists='append');
except ValueError as vx:
print(vx)
except Exception as ex:
print(ex)
else:
print("Table %s created successfully."%tableName);
finally:
dbConnection.close()
这是一个示例,其中包括一些额外的代码。
# Insert from dataframe to table in SQL Server
import time
import pandas as pd
import pyodbc
# create timer
start_time = time.time()
from sqlalchemy import create_engine
df = pd.read_csv("C:\\your_path\\CSV1.csv")
conn_str = (
r'DRIVER={SQL Server Native Client 11.0};'
r'SERVER=your_server_name;'
r'DATABASE=NORTHWND;'
r'Trusted_Connection=yes;'
)
cnxn = pyodbc.connect(conn_str)
cursor = cnxn.cursor()
for index,row in df.iterrows():
cursor.execute('INSERT INTO dbo.Table_1([Name],[Address],[Age],[Work]) values (?,?,?)',row['Name'],row['Address'],row['Age'],row['Work'])
cnxn.commit()
cursor.close()
cnxn.close()
# see total time to do insert
print("%s seconds ---" % (time.time() - start_time))