2013-10-12 82 views
0

我設計了一個帶有外鍵約束的大型DB,以防止插入損壞的數據,這違反了這些約束。我希望,當我用Python插入數據時,它會跳過外鍵約束失敗的每個條目,這樣只有「真實」數據被插入到數據庫中。有點像過濾器。但是,只要發生「損壞」條目,腳本就會停止。有什麼辦法可以迫使他繼續,只是跳過不需要的線?Python:MySQL批量插入,跳過外鍵約束失敗的條目

感謝您的幫助!

回答

0

您可以使用INSERT INTO ... SELECT ...進行條件插入。讓我們做一個例子:有兩個表國家城市,並從city引用列country_id國家相應列。

  • country(country_id,name)
  • city(city_id,name,country_id)

以下INSERT語句將進入無條件。如果國家/地區中不存在任何行,則其失敗,值爲:country_id

INSERT INTO city (city_id, name, country_id) 
      VALUES (:city_id, :name, :country_id); 

下面的語句只是插入的條目,如果國相應的行存在。否則,沒有任何反應。

INSERT INTO city (city_id, name, country_id) 
     SELECT :city_id, :name, :country_id 
     FROM country 
     WHERE country_id=:country_id;