Python, вопрос начинающего! Репозиторий или объект сохраняются?

Я – опытный разработчик .Net, который пытается написать код Python. В одном из проектов, в котором я участвую, у нас есть уровень услуг, который представляет собой набор классов, которые абстрагируют функциональность и веб-приложение django, которое потребляет их в сервисах процесса (которые являются только классами).

Я создал слой репозитория и обеспечил, чтобы все взаимодействие с базой данных происходило через уровень сервиса через этот репозиторий. У нас есть документально ориентированная база данных, и поэтому у нас нет обычной объектно-реляционной гадости. Во время недавнего обзора кода один разработчик, который предположительно приправлен python, избегал этого и прокомментировал, что это не способ выполнения python. Он заметил, что разработчики python используют метод сохранения и удаления самого экземпляра объекта (и не используют шаблон репозитория), и это путало бы разработчиков python, которые хотели бы внести свой вклад в наш проект OSS. Python разработчики, ваши взгляды? Вы были бы смущены?

Изменить: это не код django, но будет кодом, вызываемым приложением django (это в слое сервиса процесса)

4 Solutions collect form web for “Python, вопрос начинающего! Репозиторий или объект сохраняются?”

Возможно, это шаблон Django, но никак не Python. Тем не менее, если целевой аудиторией вашего модуля являются разработчики Django, я бы посоветовал вам как можно больше придерживаться философии Django и связанных с ней шаблонов.

ORM Django предоставляет методы save() и delete() для объекта. SQLAlchemy, с другой стороны, имеет так называемый session к которому вы добавляете или удаляете объекты.

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

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

Если бы мне сказали «это код Django», но код отклонился от того, как Django делает что-то, что может сбивать с толку.

Не повторяйте себя. Если все данные, хранящиеся в базе данных, предназначены для доступа через django (например, они определены в django models.py); есть django-ORM, который уже разработан для безопасного (без SQL-инъекции) и легко получить доступ к базе данных для вас через save() и delete() . Также есть полезные функции обертки для создания транзакций (например, @transaction.commit_on_success для группировки действий. Вы можете использовать ORM в скриптах python за пределами работающего веб-приложения django. Например, создайте команду управления django или запустите сценарий из оболочка django ( ./manage shell )

Я определенно согласен с тем, что другой слой репозитория создает путаницу и потенциально приводит к серьезным проблемам для людей, использующих ваш. Например, иногда у вас есть проверка модели, которая выходит за рамки проверки базы данных, и если вы сохраните ее за пределами django, проверка которой никогда не выполняется. Или, может быть, каждый раз, когда сохраняется конкретная модель, должно происходить дополнительное поведение (например, создание бесплатного объекта или создание задачи), которое было бы пропущено, если save() не вызывается, поэтому сигналы pre_save post_save никогда не генерируются.

Конечно, вы сказали, что это документально-ориентированная база данных (например, mongdb / couchdb), и AFAIK django не поддерживает эти виды NoSQL dbs, поэтому игнорируйте то, что я сказал.

  • RuntimeError: максимальная глубина рекурсии превышена с помощью Python 3.2 pickle.dump
  • Лучший онлайн-ресурс для изучения Python?
  • Считайте уникальные цифры одним слоем (эффективно)
  • регулярное выражение для строкового формата
  • ValueError: отрицательное число не может быть увеличено до дробной мощности
  • Вызов параметра функции в другом
  • Сравнить строку со всеми значениями в массиве
  • Записывая текстовый файл, всякий раз, когда я добавляю в строку, он записывается на следующей строке
  • Сравните x.split () с некоторыми значениями
  • Почему этот код не работает (Leetcode в Python)?
  • pycallgraph с pycharm не работает
  •  
    Interesting Posts for Van-Lav

    Перенос с Javadoc на Python Documentation

    Поиск python с изображениями google

    Разбор большого (20 ГБ) текстового файла с питоном – чтение в 2 строках как 1

    Чтобы суммировать значения одних и тех же элементов в списке кортежей, когда они являются строками

    Ошибка lxml «IOError: Ошибка чтения файла» при анализе facebook mobile в скрипте скрепера python

    Выполните обратную суммарную сумму на массив numpy

    лучший способ обработки вложенного списка

    Python PIL – Draw Circle

    Обновление большого количества объектов в хранилище данных в Google App Engine

    В чем разница между размером и количеством в пандах?

    как я могу использовать fileinput для редактирования нескольких файлов?

    Отфильтровать часть изображения с помощью PIL, python

    разбор файла с разделителями табуляции в Python

    Консоль bash Git 2.5.1 не открывает интерпретатор python

    Как показать изображения клавиш клавиатуры в строке с текстом с помощью Sphinx?

    Python - лучший язык программирования в мире.