2013-05-15 23 views
9

私はdjango + MySQLを使用しています。ときには、データベースに重複データを挿入すると、djangoがIntegrityErrrorを呼び出すことがあります。Django - 異なる種類のIntegrityErrorを区別する

問題は、django/pythonは、同じエラーのいくつかを別のMySQL errorsで使用していることです。それらを区別する唯一の方法は、エラーコードを調べることです。たとえば、

try: 
    # code that raises integrity error 
except IntegrityError 
    if e.args[0] == 1062: 
     raise CustomCreatedDuplicateEntryError 
    else: 
     raise e 

私の質問です:これは安全ですか?もしそうなら、これはなぜ低レベルで実装されていないのですか? IntegrityErrorよりもきめ細かな制御を望む唯一の人にはなり得ないようです。

ありがとうございます!

EDIT

コードこのエラーに

class Foo(django.db.models.Model): 
    guid = models.CharField(max_length=32, db_index=True, unique=True) 

Foo(guid=a).save() 
# this raises an IntegrityError with code 1062! 
Foo(guid=a).save() 
+0

整合性エラーを引き起こしているコードを投稿できますか? –

+0

@ScottWoodall、追加されました:これは役立つかどうかは分かりませんが、それはジャンゴの非常に一般的なエラーです(なぜそれが発生するのか質問しているのでたくさん質問します) – djs22

+2

そのエラー番号はデータベースエンジン依存? –

答えて

3

を高めるためには、行うことは、これは安全ですか?

これは安全ではありません。これを行うことで、アプリケーションとデータベース(MySQL)との間の結合が作成されましたが、どうすればMySQLを他のデータベースソリューションに置き換えることができますか?エラーコードが変更され、コードの一貫性のないメッセージが生成されます。

もしそうなら、これはなぜ低レベルで実装されていないのですか?

私はおそらく同じ懸念のためです。

+1

djangoのようなdbに依存しないORMは複数のデータベースのエラーコードをマップするだけでは不思議そうです。 Andrewがこれを取ることについての質問のコメントの会話を参照してください – djs22

+0

ORM自体ではなく、拡張機能に適した仕事かもしれません。 ORM開発者にとって、ROIはほとんどありませんが、あなたが提案していることをするには多くの努力が必要です。 – rubayeet

関連する問題