12

私はdjango + MySQLを使用しています。時々、重複したデータをデータベースに挿入すると、django でIntegrityErrror.

問題は、django/python がこの同じエラーをいくつかの異なるMySQL エラーに使用することです。それらを区別する唯一の方法は、エラー コードを確認することです。例えば、

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

私の質問は: これは安全ですか? もしそうなら、なぜこれがより低いレベルで実装されていないのですか? IntegrityError をより細かく制御したいのは私だけではないようです。

ありがとう!

編集

このエラーを発生させるコード

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()
4

1 に答える 1

5

これは安全ですか?

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

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

おそらく私が抱えているのと同じ懸念のためです。

于 2013-05-16T06:42:58.340 に答える