0

私はdjango 1.9プロジェクトを持っており、mongoengineを使用してmongodbインスタンスに接続しています。

次のようなモデルがあります。

from django.db import models
from mongoengine import * 
class Employee(Document):
    email = StringField(required=True, unique=True)
    first_name = StringField(max_length=50)
    last_name = StringField(max_length=50)

テストクラス:

import web.models as models
class test:

    '''Test the accessibility of the business class'''
    def testBusiness():
        employee = models.Employee.objects.create(
            email="pedro.kong@company.com",
            first_name="Pedro",
            last_name="Kong"
        )
        try:
            employee.save()
        except pymongo.errors.DuplicateKeyError as e:
            return "Error"
        return "Business Tested"

問題は、実行をキャッチできないことDuplicateKeyErrorです:

pymongo.errors.DuplicateKeyError: E11000 duplicate key error index: rockynode.employee.$email_1  dup key: { : "pedro.kong@company.com" }

グローバルな try except を試してみましたが、DuplicateKeyError例外が発生してコードがクラッシュします。

try:
    employee.save()
except:
    return "Error"
return "Business Tested"

情報については、次の依存関係を使用しています。

Django==1.9.7
mongoengine==0.10.6
pymongo==3.2.2

参照: get-the-duplicate-value-on-duplicatekeyerror

どんな助けでも非常にありがたい.Thx.

4

2 に答える 2

2

ドキュメントで自分自身を見たようにcreate、保存されたドキュメントを返すので、それを使用する場合

  • もう一度保存する必要はありません
  • そこに保存例外をキャッチする必要があります

    try:
        employee = models.Employee.objects.create(
            email="pedro.kong@company.com",
            first_name="Pedro",
            last_name="Kong"
        )
    except Exception as e:
        return "Error \n %s" % (e)
    return "Business Tested"
    

または、create を使用せずに別のステートメントで保存する場合:

    employee = models.Employee(
        email="pedro.kong@company.com",
        first_name="Pedro",
        last_name="Kong"
    )
    try:
        employee.save()
    except Exception as e:
        return "Error \n %s" % (e)
    return "Business Tested"
于 2016-06-20T16:42:46.583 に答える