これらの制約に違反する破損したデータの挿入を防ぐために、外部キー制約を持つ大規模な DB を設計しました。Python でデータを挿入するときに、外部キーの制約が失敗したすべてのエントリをスキップして、「実際の」データのみがデータベースに挿入されることを期待していました。フィルターみたいなやつ。ただし、「破損した」エントリが発生すると、スクリプトは停止します。彼に続行させ、不要な行をスキップさせる方法はありますか?
ご協力いただきありがとうございます!
これらの制約に違反する破損したデータの挿入を防ぐために、外部キー制約を持つ大規模な DB を設計しました。Python でデータを挿入するときに、外部キーの制約が失敗したすべてのエントリをスキップして、「実際の」データのみがデータベースに挿入されることを期待していました。フィルターみたいなやつ。ただし、「破損した」エントリが発生すると、スクリプトは停止します。彼に続行させ、不要な行をスキップさせる方法はありますか?
ご協力いただきありがとうございます!
ハンドラーを使用する必要があります: http://dev.mysql.com/doc/refman/5.1/en/declare-handler.html
そしてcontinue
オプションを選択
いくつかのハンドラーの例:
INSERT INTO ... SELECT ...
条件付き挿入を行うために使用できます。例を見てみましょう: 2 つのテーブルcountryとcityがあり、対応する column from country への参照からcountry_id
の列があります。city
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);
次のステートメントは、countryに対応する行が存在する場合にのみ、エントリを挿入します。そうしないと、何も起こりません。
INSERT INTO city (city_id, name, country_id)
SELECT :city_id, :name, :country_id
FROM country
WHERE country_id=:country_id;