2015-06-03 75 views
3

我想「插入忽略」整個熊貓數據框到mysql中。有沒有辦法做到這一點沒有循環的行?插入忽略熊貓數據框到mysql

在dataframe.to_sql中,我只能看到選項if_exists'追加',但這仍然會繼續重複的唯一鍵嗎?

回答

0

在pandas中沒有辦法做到這一點,直到pandas (0.20.3)的當前版本。

選項if_exists僅適用於documentation中所述的表(不在行上)。

if_exists : {‘fail’, ‘replace’, ‘append’}, default ‘fail’ 

fail:如果存在,什麼也不做。

replace:如果存在,請刪除它,重新創建它並插入數據。

append:如果存在,則插入數據。創建如果不存在。

通過循環

這將放慢因爲你是在一個時間

for x in xrange(data_frame.shape[0]): 
    try: 
     data_frame.iloc[x:x+1].to_sql(con=sql_engine, name="table_name", if_exists='append') 
    except IntegrityError: 
     # Your code to handle duplicates 
     pass 
1

考慮使用臨時表(用決賽桌的確切結構)插入一個一行的過程總是被取代大熊貓然後在光標調用運行INSERT IGNORE

dataframe.to_sql('myTempTable', con, if_exists ='replace') 

cur = con.cursor() 
cur.execute("INSERT IGNORE INTO myFinalTable SELECT * FROM myTempTable") 
con.commit() 
+0

將最後3行這樣的,如果你正在使用的SQLAlchemy: '連接= engine.con nect() result = connection.execute(「INSERT IGNORE INTO myFinalTable SELECT * FROM myTempTable」) connection.close()' – kristian