ФорумПрограммированиеPythonDjango → ORM update() vs save()

ORM update() vs save()

  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:57

    Дуд, ты в курсе отличий?

    -        Post.objects.filter(pk=self.pk).update(message=message)
    
    +        post = Post.objects.get(pk=self.pk)
    +        post.message = message
    +        post.save()
    
    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 15:58, спустя 46 секунд

    @adw0rd, ты меня совсем за лоха принимаешь? конечно в курсе

    Спустя 31 сек.

    первое это ваще можно сказать raw sql :D

    просто через билдер прогнанное.

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:00, спустя 2 минуты 23 секунды

    Ну я к тому, зачем ты поменял изменение одного поля message на изменение всех полей в Post?

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:01, спустя 45 секунд

    @adw0rd, а ты сам в курсе различий?)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:04, спустя 2 минуты 30 секунд

    Я то знаю:

    In [1]: from forum.models import Post
    In [2]: p = Post.objects.get(pk=42)
    
    In [3]: p.save()
    UPDATE "forum_post"
    SET "topic_id" = 17,
        "author_id" = 2,
        "message" = 'Поздравляем почетную крысу нашего форума и вообще хорошего человека с этим знаменательным днем.',
                    "message_formatter" = 'bbcode',
                                          "created" = '2007-07-18 08:39:07+00:00',
                                                      "updated" = '2014-03-02 21:03:51.042910+00:00',
                                                                  "attachments_count" = 0,
                                                                  "absolute_url" = ''
    WHERE "forum_post"."id" = 42  [28.12ms]
    
    
    In [4]: Post.objects.filter(pk=42).update(message=p.message)
    UPDATE "forum_post"
    SET "message" = 'Поздравляем почетную крысу нашего форума и вообще хорошего человека с этим знаменательным днем.'
    WHERE "forum_post"."id" = 42  [1.76ms]
    
    adw/0
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:04, спустя 24 секунды

    имеется ввиду, что update сигналы не вызывает?

  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:04, спустя 12 секунд

    [28.12ms] и [1.76ms]

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:07, спустя 3 минуты 14 секунд

    @adw0rd, [28.12ms] и [1.76ms]

    @adw0rd, как ты жалок)

    Спустя 71 сек.

    имеется ввиду, что update сигналы не вызывает?

    @Sinkler, и их тоже. update это raw sql builder.

    мне было лень переписывать логику и я очевидно переписал код. 3 раза в минуту(ой спиздел, раз в 30 минут, пыха уже не та) на 28мсек ничего не стоят

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:12, спустя 4 минуты 49 секунд

    Ну я не понял зачем вообще ты это сделал? Было же и так хорошо, зачем делать хуже?

    Тем более, народ жаловался что тормозит при отправке сообщения, я переделал на update и стало лучше.

    Это у меня 28ms на хорошем проце и SSD, думаю другие цифры будут на нашем захудалом хостинге

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:17, спустя 5 минут 11 секунд

    Ну я не понял зачем вообще ты это сделал? Было же и так хорошо, зачем делать хуже?
    FACEPALM

    class Post(models.Model):
        topic = models.ForeignKey(Topic, related_name="posts")
        author = models.ForeignKey(
            settings.AUTH_USER_MODEL, related_name="posts")
        message = models.TextField()
        message_formatter = models.CharField(
            max_length=8, default="bbcode",
            choices=settings.TEXT_FORMATTERS)
        created = models.DateTimeField(auto_now_add=True, db_index=True)
        updated = models.DateTimeField(auto_now=True, db_index=True)
    

    updated = models.DateTimeField(auto_now=True, db_index=True) в этой строчке как ты думаешь, при update сработает?) это я тебе намекающий вопросец задаю)

    ааа я даже вспомнил почему я костыльнул через сохранение объектом

    Спустя 35 сек.

    мм а как в маркдаун коде подсказать какой язык там?

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:20, спустя 2 минуты 11 секунд

    Если бы ты добавил поле updated в update(), я бы понял тебя. Но если честно, то насрать на поле updated, где оно вообще используется?)

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:22, спустя 2 минуты 18 секунд

    Если бы ты добавил поле updated в update(), я бы понял тебя. Но если честно, то насрать на поле updated, где оно вообще используется?)

    @adw0rd, да, а вот и кульминация))) я там видел с датами както очень хитро рабоатете, разбираться не стал - сделал сохранение через модель. я ж лентяй))

    второе - используется в склейке, с ним сравнивается время между сообщениями на склейку которые должны или нет пойти.

    так что нет, не из-за тупости своей так сделал)

    Сапожник без сапог
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:29, спустя 6 минут 44 секунды

    Понял, ну вообщем если будет время можно вернуть update и добавить туда updated

    update(message=message, updated=timezone.now())
    

    Просто чем больше сообщение в посте, тем больше данных идут на сохранение... А добавление поста одно из самых тормозных мест у нас, если ты проанализируешь и оптимизируешь, то будет круто!

    adw/0
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:33, спустя 3 минуты 53 секунды

    Просто чем больше сообщение в посте, тем больше данных идут на сохранение.
    ЛОЛ

    не пугай козу травой, это я про данные и бд сервер.

    единственное почему может тормозить, то это только перестройка индексов. ведь самые большие данные от сообщения (ого! соощение то самое большое наверное, я бы даже сказал что часто сообщение само это 80-99% от всех данных возможных) :-)

    а вот index rebuild это да) если они там есть конечно)

    Сапожник без сапог
  • phpdude

    Сообщения: 26617 Репутация: N Группа: в ухо

    Spritz 2 марта 2014 г. 16:38, спустя 5 минут 51 секунду

    тест склейки

    Спустя 15 сек.

    олол

    Спустя 79 сек.

    и еще

    Спустя 61 сек.

    тестик)

    Спустя 98 сек.

    а вот это сообщение после 5 минут с времени создания прошлого, если все ок, то должно все склеиться отлично ...

    Спустя 23 сек.

    да, все отлично. быстро, сильно, молодежно! как эдво желал :-)

    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!