Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Django ORM Sugar - теперь с поддержкой индексов и слайсов [RSS Feed]

#1 Март 17, 2016 11:50:25

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

Добрый день всем.

Возможно, кто-то уже читал про этот небольшой проектик на хабре https://habrahabr.ru/post/263821/. В любом случае, кому-то эта библиотека оказаться весьма полезной.
Страница проекта на гитхабе - https://github.com/Nepherhotep/django-orm-sugar

Для ленивых - библиотека добавляет синтаксического сахара (по сути - питоновского синтаксиса) при создании запросов через джанговскую ORM. Используя ее, вместо underscored синтаксиса

>>> SomeModel.objects.filter(user__profile__common_bucket__seq_count__gte=7)
можно использовать питоновские операторы сравнения
>>> SomeModel.objects.filter(Q.user.profile.common_bucket.seq_count >= 7)
В примере выше оператор сравнения просто возвращает Q объект, который дальше применяется в фильтре:
>>> Q.user.age < 7
Q(user__age__lt=7)
При этом старый способ инициализации Q объектов также работает, так что существующий код не сломается:
>>> Q(user__age__lt=7)
Q(user__age__lt=7)
Из нового - добавил поддержку сравнения элементов по индексу и слайсы (для тех, кто использует постгресовские ArrayField и JSONField):
>>> Q.data.owner.other_pets[0].name='Fishy'
Q(data__owner__other_pets__0__name='Fishy')
>>> Q.tags[0] == 'thoughts'
Q(tags__0='thoughts')
>>> Q.tags[0:2].contains(['thoughts']) 
Q(tags__0_2__contains=['thoughts'])

Полное описание возможностей смотрите на гитхабе.



Офлайн

#2 Март 17, 2016 12:22:30

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

Сколько сахара в говно не добавляй - лучше оно от этого не станет.

Офлайн

#3 Март 17, 2016 12:32:14

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ayb
Сколько сахара в говно не добавляй - лучше оно от этого не станет.
Слишком толсто.



Офлайн

#4 Март 17, 2016 13:22:16

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ZAN
И правдиво

Отредактировано 4kpt_IV (Март 17, 2016 13:36:04)

Офлайн

#5 Март 17, 2016 14:12:09

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ayb
4kpt_IV
Отставить холиварные высказывания в данном топике.
:)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Март 17, 2016 18:00:54

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

Ну так а в чем смысл библиотеки ? Зачем она нужна. Кто ей будет пользоваться ? Какой профит от ее использования ?

Офлайн

#7 Март 17, 2016 18:19:15

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ayb для дальнейшей с вами дискуссии не самое было удачное начало



Офлайн

#8 Март 17, 2016 19:43:31

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ayb
смысл понятен - многих банально раздражает система нижних подчеркиваний, тут же библиотека приводит к привычному виду тривиальные действия.
Вот кто это будет пользовать - вот тут согласен. Возможно это разработчикам Django показать надо =)



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#9 Март 17, 2016 20:25:45

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

ZAN
для дальнейшей с вами дискуссии не самое было удачное начало

Нет, простите, это форум и я могу высказывать свое мнение. Мое мнение отличается от Вашего ? Ну ничего страшного, так бывает.

JOHN_16
смысл понятен - многих банально раздражает система нижних подчеркиваний

Проводились какие-то исследования ? Я как раз думаю наоборот - многим просто пофиг на эти подчеркивания. Это из примерно из той же оперы как и получение значения ключа в словаре через точку ( как атрибут ). Ну вроде бы прикольно, некоторые так даже делают, но смысла в этом никакого нет.

Итого : ТС написал библиотеку, которая по факту - не улучшает производительность ( по факту даже немножко её снижает, но это можно опустить ) и не улучшает читаемость ( но это субъективное мнение ). При этом отказывается ответить на вполне нормальные вопросы.

Офлайн

#10 Март 17, 2016 20:32:35

ZAN
От:
Зарегистрирован: 2007-06-10
Сообщения: 403
Репутация: +  10  -
Профиль   Отправить e-mail  

Django ORM Sugar - теперь с поддержкой индексов и слайсов

JOHN_16
У подхода с подчеркиваниями есть следующие проблемы:
главная проблема - нарушение принципа DRY. Если делается сложный запрос, то из-за того, что параметр передается, как keyword, его нельзя использовать заново (к примеру, если нужно сортировать по тому же полю). Проблема вторая - легко ошибиться с количеством подчеркиваний, особенно, если внутри самих полей есть подчеркивания. Третья проблема концептуальная - если я хочу отфильтровать поля, сравнивая со значением, то зачем использовать lookup expression “eq”, “gt” и т.д., если в питоне есть операторы? Ведь код - это своего рода история, если я хочу описать “больше или равно”, то в питоне есть для этого оператор “>=”, и по идее не нужно запоминать, какой lookup expression придумали разработчики джанги - “ge” или все-таки “gte”. Особенно это заметно для последних нововведений - сравнение, используя индексы или срезы - Q(tags__0_3__contains=) выглядит не очень презентабельно. Ни подсветка синтаксиса, ни мой внутренний парсер питона не умеет определять такие конструкции сходу, что усложняет чтение кода.
Касательно того, кто это будет использовать - да кто угодно, кто согласен с моими аргументами.
На счет разработчиков джанги - да, я обсуждал это в группе. Там захотели более общий подход, а не просто конвертация запроса в Q объект. Дело в том, что в джанге идет уход от кейвордов к созданию объектов, определяющих SQL запрос (примеры - относительно новый Expression API, Prefetch объекты и т.д.). Для внедрения полноценного синтаксиса от Django ORM Sugar, нужно реализовать поддержку методом filter специального класса (один из вариантов - класса, поддерживающего Expression API). Тогда бы вместо filter(username='Вася'), можно будет передать спец объект filter(Exact('username', ‘Вася’)). Вся хитрость в том, что такие объекты можно будет легко генерировать динамически подобно тому, как это сделано в Django ORM Sugar. Разница, возможно, не такая уж и большая, однако такой подход сделает Django ORM:
1. Более гибким - можно будет делать запросы, для каких вообще не существует соответствующих lookup expressions
2. Более простым, т.к. уже на данный момент код, разбирающий keywords на поля и lookup expression довольно сложен.
У меня была попытка сделать пул реквест, но никак не получалось решить один очень хитрый тест кейс, связанный с .exclude() вызовом, если в нем фильтруются ForeignKey. В принципе, может я его и доработаю когда-нибудь, но сейчас руки до этого не доходят.



Офлайн

  • Начало
  • » Django
  • » Django ORM Sugar - теперь с поддержкой индексов и слайсов[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version