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, поэтому игнорируйте то, что я сказал.

  • Каков наилучший способ сделать мелкую копию словаря Python?
  • ожидаемая строка или буфер в python
  • Миграция схемы в хранилище данных GAE
  • Зачем возвращать что-либо, кроме `self` из` __iadd__`?
  • Различия между модулем подпроцесса, посланником, sarge и pexpect?
  • Преобразование строки в список в Python
  • Текущее решение для чистого python для facebook-oauth?
  • Выполнить скрипт python внутри скрипта python
  •  
    Interesting Posts for Van-Lav

    Пример "use \ G в негативных переменных длины lookbehinds, чтобы ограничить, как далеко назад lookbehind идет"

    В Python, как я могу указать, что я переопределяю метод?

    Поиск окружающего предложения символа / слова в строке

    Можно ли использовать SQL для разделения содержимого столбца таблицы, хранящегося в CSV (значения, разделенные запятой) на отдельные строки в новой таблице?

    регулярное выражение python. Извлечение текста между шаблонами

    Получить размер изображения БЕЗ загрузки изображения в память

    Цикл списка из чередующихся сторон

    Эффективный способ хранения миллионов массивов и проверка IN

    CSV new-line символ, отображаемый в некотируемой ошибке поля

    Преобразование текстовых данных из объекта запроса в dataframe с помощью pandas

    Выполнить SQL-файл с несколькими операторами, разделенными «;», используя pyodbc

    Как я могу вызвать скрипт python из сценария python

    Как бы вы наследовали и переопределяли классы модели django для создания listOfStringsField?

    Как установить пароль пользователя в linux из скрипта python?

    Создание проекта Flask-Admin во время тестирования

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