2016-11-14 51 views
1

我用.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 

如何將熊貓數據框插入數據庫而沒有數據重複?

(另外,我試圖使用LOAD DATA LOCAL INFILE,但我不能因安全問題使用它。)如果您有管理權限

回答

3

你的數據庫上,我建議你把一些對桌子本身的限制。然後python插入會引發一個異常(你可以攔截它)。 否則,您也可以嘗試從表中檢索數據並將其合併到熊貓內。然後在所有列上進行分組,並將不存在的數據作爲新數據框並插入。

+0

我認爲這是一個正確的方向 - OP會想建立一個'主Key'或'獨特Key'約束。但它們不一定需要管理權限 - 擁有此表的模式/用戶的「ALTER TABLE」特權應該足夠了。國際海事組織將整個表格讀入熊貓DF並檢查熊貓方面的重複數據將「毀掉」將這些數據存儲在SQL DB中的想法......只是我的0.02 $ – MaxU

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) 
+0

使用.to_sql函數無法避免重複值同一張桌子。當您再次運行您的代碼時,相同的數據將被插入或發生錯誤消息'duplicate entry ~~' – Bethlee

+0

首先,您需要將表中的數據轉換爲數據框,然後將userdata與表進行比較並刪除重複項,並將最終數據寫入用to_sql表格 – Poonam

+0

謝謝你回答這個問題。當我將您的建議應用於小數據時,它會很好。但是我在大數據中應用了這個建議。我可以在比較數據庫中的所有數據時獲得有效的性能嗎? – Bethlee

相關問題