簡體   English   中英

如何在不重復數據的情況下將pandas數據框插入數據庫?

[英]How can I insert pandas dataframe to database without data duplication?

我使用.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,但由於安全問題,我無法使用它。)

如果您對數據庫具有管理權限,建議您對表本身施加一些約束。 然后python插入將引發異常(您可以攔截它)。 另外,您還可以嘗試首先從表中檢索數據並將其合並到熊貓中。 然后對所有列進行分組,並獲取不存在的數據作為新數據框並將其插入。

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM