Ответы пользователя по тегу Django
  • Есть ли низкоуровневый SQL Query Builder для Python?

    @emacsway
    Здесь расписано по поводу нужен ли SQL Query Builder.
    Но в любом случае, детали реализации создания запроса желательно скрыть от клиента за абстрактным интерфейсом, ответственным за это. В таком случае приложению будет безразлично что Вы там используете. Лично я добавляю зависимость от нового инструмента только тогда, когда это становится действительно необходимым.

    Как говорил Кент Бек: “Of course, you can do a better job if you have more tools in your toolbox than if you have fewer, but it is much more important to have a handful of tools that you know when not to use, than to know everything about everything and risk using too much solution.”

    Обычно я использую с Django ORM эту библиотеку https://sqlbuilder.readthedocs.io/
    Там есть парсер для поддержки JSON-операторов.

    Но вы можете использовать любой удобный для Вас билдер запросов, например, от SQLAlchemy или Storm ORM, или даже LINQ-style https://github.com/pythonql/pythonql . Главное - постараться избежать осведомленности приложения о деталях реализации.
    Ответ написан
    Комментировать
  • Выбор ORM для Python?

    @emacsway
    Согласен с Артём Иннокентьев , но если очень хочется ORM, то тогда есть смысл рассмотреть Storm ORM https://emacsway.github.io/ru/storm-orm/
    Ответ написан
    Комментировать
  • Как разогнать Django ORM?

    @emacsway
    Правильно сказали - нужно профилировать запросы. Сперва нужно установить причину. Найти тормозный запрос, проверить индексы, посмотреть в EXPLAIN. По своему опыту скажу, что Джанго ORM иногда создает такие запросы (например, исключение через подзапрос и т.п.), что единственное приемлемое решение будет не использовать билдер запросов от Джанги, а использовать Raw-SQL. Однако я не большой сторонник Raw-SQL, и меня в таком случае часто выручает эта библиотечка для построения SQL запросов. Если делается много одиночных запросов связями, - то prefetch_related().
    Ответ написан
    Комментировать