我使用.to_sql函数来插入数据。但它无法检查重复的插入数据。 (它只能检查重复的表)
源代码)当我在下面运行两次源代码时。
userData.to_sql(con=engine, name='test_quest_complete', schema='test', if_exists='append')
结果)表格中插入了相同的数据。
0 2016-11-14 00:00:10 AAAA
1 2016-11-14 00:00:20 BBBB
0 2016-11-14 00:00:10 AAAA
1 2016-11-14 00:00:20 BBBB
如何在没有数据重复的情况下将pandas数据帧插入数据库?
(另外,我尝试使用本地infile的加载数据,但由于安全问题我无法使用它。)
答案 0 :(得分:3)
如果您对数据库拥有管理权限,我建议您对表本身进行一些约束。然后python插入将引发异常(并且您可以拦截它)。 此外,您还可以尝试从表中检索数据并将其合并到pandas中。然后在所有列上进行分组,并将不存在的数据作为新数据帧并插入。
答案 1 :(得分:1)
import pandas as pd
import pypyodbc
from sqlalchemy import create_engine
##Data of Excel File - ExcelData(Sheet1)
##id name
##1 11
##2 22
##3 33
##4 44
##5 55
##CREATE TABLE [test].[test_quest_complete](
## [id] [int] NULL,
## [name] [int] NULL
##)
TblName="test_quest_complete"
cnxn = pypyodbc.connect("dsn=mydsn;Trusted_Connection=Yes")
engine = create_engine("mssql+pyodbc://mydsn")
file_name="C:\Users\poonamr\Desktop\ExcelData.xlsx"
xl = pd.ExcelFile(file_name)
userData = xl.parse("Sheet1")
print(userData)
sql="Select * From test." + TblName
tblData=pd.read_sql(sql,cnxn)
print(tblData)
Finalresult=pd.concat([userData, tblData]).drop_duplicates(keep=False)
print(Finalresult)
Finalresult.to_sql(TblName, engine, if_exists='append',schema='test', index=False)