iT邦幫忙

0

Python to_sql 問題

  • 分享至 

  • xImage

我使用
df.to_sql('Table_name',con=engine,index=False,if_exists='replace')
將資料上傳到 資料庫中
原本有設定 "ID" 當作資料庫中的 Primary key
但在每次同樣方式傳到資料庫後 , Primary key 設定就會跑掉 , 就跟 create new table 一樣 , 再請指教 謝謝幫忙

看更多先前的討論...收起先前的討論...
我沒記錯的話if_exists='replace'
如果資料庫有重複的資料表的話,他會刪除整個表在重新建立
所以會發生這個原因
你實際想達成的是?
改用if_exists = 'append'呢?
對耶 , 剛剛去看文件 if_exists 是針對 table 判斷
我想達到效果 , 將資料匯入原本的 table, 如果 ID 重複 , 就將新檔案內的資料覆蓋上去
你的DF長怎樣
我看文件可能沒辦法達成你要的效果
或是你也可以沿用
if_exists='replace'
只是參數的部分設定
index = True
index_label = "ID"
應該是這樣,看一下文件
append: Insert new values to the existing table. 我改用 if_exists='append ' ,不會刪除 table 直接匯入 , 但是遇到 primary key 重複資料就會 show error , 不會直接覆蓋
如果要達成更新應該只能像我昨天說的,參數部份調整一下,讓他建立TABLE的時候知道PK是哪個欄位
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

1
海綿寶寶
iT邦大神 1 級 ‧ 2022-04-22 10:11:54
最佳解答

這裡的 if_exists=replace/append 指的是整個 table的處理
當 table 已存在時
1.寫 replace
會取代掉原 table (也就是在原 table 裡的所有設定(含 primary key)會清空)
2.寫 append
保留原 table,只 append 資料
此時若 ID 重覆(違反 primary key),則會出現錯誤而結束執行

看起來你想要做的是row level的處理(eg.ID 重覆就 replace 該筆資料)
得要另外建立一個 temp table
然後自己判斷是否已存在並做對應處理
參考這篇的做法

obarisk iT邦研究生 1 級 ‧ 2022-04-22 17:18:25 檢舉

直接 upsert 比較複雜就要寫 on conflict 。
不過上面這兩種好像都不是標準語法

我要發表回答

立即登入回答