我有一个 API 服务,在这个服务中,我将 pandas 数据帧结果写入 SQL Server。
但是当我想向表中添加新值时,我无法添加。我使用了 append 选项,因为在文档中它说它向数据框添加了新值。我没有使用替换选项,因为我不想每次都放下我的桌子。
我需要在保留旧值的同时将新值发送到数据库表。
除了 pandas 方法,我已经研究过任何其他方法或to_sql
方法,但我只能在任何地方看到 pandas。
有人对此有任何想法吗?
谢谢。
我有一个 API 服务,在这个服务中,我将 pandas 数据帧结果写入 SQL Server。
但是当我想向表中添加新值时,我无法添加。我使用了 append 选项,因为在文档中它说它向数据框添加了新值。我没有使用替换选项,因为我不想每次都放下我的桌子。
我需要在保留旧值的同时将新值发送到数据库表。
除了 pandas 方法,我已经研究过任何其他方法或to_sql
方法,但我只能在任何地方看到 pandas。
有人对此有任何想法吗?
谢谢。
您应该确保您的 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))