2013-05-15 67 views
9

我正在使用django + MySQL。有時候,我會在數據庫中插入重複數據,這會導致django引發IntegrityErrrorDjango - 區分不同類型的IntegrityError

問題是,django/python對幾個不同的MySQL errors使用相同的錯誤。區分它們的唯一方法是查看錯誤代碼。例如,

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() 
+0

您可以發佈引發完整性錯誤的代碼嗎? –

+0

@ScottWoodall,補充:)我不確定這是否會有所幫助,但這是django中的一個非常常見的錯誤(有關SO的問題很多,爲什麼它會被提出) – djs22

+2

是不是原因只是這些錯誤號是數據庫引擎依賴? –

回答

3

這是安全的呢?

這並非不安全。雖然通過這樣做,您已經在應用程序和數據庫(MySQL)之間創建了一個耦合。如果你決定用其他數據庫解決方案取代MySQL,那該怎麼辦?錯誤代碼將被更改,並且您的代碼將引發不一致的消息。

如果是這樣,爲什麼不在較低的水平上實施?

也許出於同樣的擔心,我有。

+1

我似乎很奇怪,一個數據庫不可知的ORM,如Django不只是映射多個數據庫的錯誤代碼。請參閱安德魯對此問題的評論中的對話 – djs22

+0

可能是適合擴展的工作,而不是ORM本身。需要付出很多努力才能完成對ORM開發人員的建議,而投資回報率很低。 – rubayeet