Уведомления

Группа в Telegram: @pythonsu

#1 Июль 15, 2013 20:52:20

Silent50
Зарегистрирован: 2013-04-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение ContentType

Есть код:

try:
    obj = Tag.objects.get(user_id=user.id, content_type=obj_type, object_id=item_id)
except ObjectDoesNotExist:
    obj = Tag.objects.create(user_id=user.id, content_object=ct_obj)
obj.save()

Модели скопированы из оф. документации, все что сделал добавил поле user.

Смысл в том что если начать спамить значения (user_id=1, content_type=obj_type, object_id=1), то в какой-то момент, он не найдет в базе и создаст новый объект (хотя он уже есть). И в базе получить две одинаковых записи - что мне не нужно. Что не делал ошибка есть и возникает рандомно

Не знаю что винить пробовал разные исключения DoesNotExist, get_or_create - все одно, объект создается повторно.

Куда копать?


Офлайн

#2 Июль 15, 2013 21:33:54

nnmware
Зарегистрирован: 2012-07-21
Сообщения: 133
Репутация: +  13  -
Профиль   Отправить e-mail  

Странное поведение ContentType

Ну во-первых записи не одинаковые (pk разные)
Во-вторых- что имеется в виду под “спамить значения”? Конкретнее высказывайтесь, “кокаин все-таки” (с)
В третьих- потоки используются? Может быть проблема с GIL.
+ если база MySQL- сталкивался со странным поведением блокировки при выборке записей(хз что там Оракл накрутил в последних версиях), сменил на MariaDB- проблема исчезла.

Офлайн

#3 Июль 16, 2013 13:36:33

Silent50
Зарегистрирован: 2013-04-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное поведение ContentType

1) Под спамить понимаю, передавать один и те же значения:

u = 1
id = 1
ct = ContentType
Tag.objects.get(user_id=u, content_type=ct, object_id=id)

2) Нет потоков.

Грубо говоря запись в базе есть, но он ее не находит и создает еще одну. И это происходит рандомно, может на 3 разе, а может вообще не произойти.

От мускула не отказаться

Отредактировано Silent50 (Июль 16, 2013 13:37:07)

Офлайн

#4 Июль 17, 2013 09:32:43

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Странное поведение ContentType

try:
obj = Tag.objects.get(user_id=user.id, content_type=obj_type, object_id=item_id)
except ObjectDoesNotExist:
obj = Tag.objects.create(user_id=user.id, content_type=obj_type, object_id=item_id)
obj.save()

Так тоже косяки выскакивают?



Офлайн

#5 Июль 17, 2013 09:35:49

Dr.Livsi
От:
Зарегистрирован: 2010-02-15
Сообщения: 192
Репутация: +  3  -
Профиль   Отправить e-mail  

Странное поведение ContentType

кстати, если уж в БД записи не должны повторяться - может добавить unique_together?



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version