Код Django или триггеры MySQL - PullRequest
       3

Код Django или триггеры MySQL

3 голосов
/ 31 октября 2010

Я делаю веб-сервис с Django, который использует базу данных MySQL. Клиенты взаимодействуют с нашей базой данных через URL-адреса, обработанные Django. Прямо сейчас я пытаюсь создать поведение, которое автоматически выполняет некоторую проверку / запись в журнал при изменении определенной таблицы, что, естественно, означает, что MySQL запускается. Однако я также могу сделать это в Django, в обработчике запросов, который выполняет модификацию таблицы. Я не думаю, что у Django есть поддержка триггеров, поэтому я не уверен, что лучше, используя код Django или триггер MySQL.

Кто-нибудь, обладающий знаниями об эффективности этих опций, хочет пролить свет? Заранее спасибо!

Ответы [ 2 ]

7 голосов
/ 31 октября 2010

Существует множество способов решения проблемы, которую вы описали:

  • Логика приложения
    • Логика для конкретного вида - Если поведение относится только к одному представлению, внесите изменения в представление.
    • Логика для конкретной модели - Если поведение относится к отдельной модели, то переопределить метод save () для модели.
  • Middleware Logic - Если поведение относится к нескольким моделям ИЛИ необходимо обернуть вокругВ существующем приложении вы можете использовать сигналы Django до сохранения / после сохранения , чтобы добавить дополнительные варианты поведения без изменения самого приложения.
  • Хранимые процедуры базы данных - Обычновозможность, но ORM Джанго не использует их.Невозможно переносить между базами данных.
  • Триггеры базы данных - Невозможно переносить из одной базы данных в другую (или даже из одной версии базы данных в другую), но позволяет контролировать общее поведение нескольких пользователей.(возможно, не в Django) приложениях.

Лично я предпочитаю либо переопределять метод save (), либо использовать сигнал Django.Использование логики для конкретных представлений может помочь вам в больших приложениях с несколькими представлениями одной и той же модели.

0 голосов
/ 31 октября 2010

То, что вы описываете, звучит для меня как "изменение захвата данных".

Я думаю, что компромиссы могут выглядеть следующим образом:

  1. Плюсы Django: код среднего уровня может совместно использоваться несколькими приложениями;переносимый, если база данных изменяется
  2. Минусы Django: логически не является частью бизнес-транзакции
  3. Плюсы MySQL: естественно делать это в базе данных
  4. Минусы MySQL: триггеры очень базы данныхконкретный;если вы меняете поставщиков, вам нужно переписать

. Это может быть .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...