Pull to refresh
0
0
Send message
Уже есть реализаций полно: bert-rpc.org/
Серьёзно?

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

В Windows тоже можно менять любые параметры и при этом ломать систему, а затем лезть в режим восстановления, чтобы все починить. И также есть командная строка, и даже Power Shell, который является клиентом полноценной среды объектов .NET, откуда юниксы со своими текстовыми фильтрами stdin/out еще уедут не скоро.

И почему-то на хабрахабре я помню больше интересных технических статей о Windows и его интересных хаков, а про линукс лезут в голову только советы по работе с историей в bash.

Я даже держу отдельно одну машину с виндой для того (хоть и захожу на неё в основном через sshd/cygwin), чтобы играться этим всем от того, что это жуть как интересно. Отладчики, трассировщики, шеллы и скриптовые языки тут тоже есть ;)
Ну раз уж совсем питон, то я бы делал (относительно примера):
sum(i * p for i,p in Item.objects.all().values_list('item', 'price'))
— и о namedtuples бы даже не подумал :-P
Да.
In [26]: o = pa.model.objects.all().only('name')[0]

In [27]: o
Out[27]: <Product_Deferred_list_of_deferred_fields: someproduct>

In [28]: dict(o.__class__.__dict__)
Out[28]:
{...
'ops': <db.models.query_utils.DeferredAttribute object at 0x7eb6150c>,
...}

In [30]: o.ops
Out[30]: u'лалала'

In [31]: connection.queries[-2:]
Out[31]:
[{'sql': u'SELECT "product"."id", "product"."name" FROM "product" LIMIT 1',
'time': '0.000'},
{'sql': u'SELECT "product"."id", "product"."ops" FROM "product" WHERE "ipc_product"."id" = 1 ',
'time': '0.000'}]



DeferredAttribute — обычный дескриптор новосозданного (см db.models.deferred_class_factory) класса внутри QuerySet, который реализует нужное поведение внутри __get__.

Да, это не так быстро, как namedtuples (а изначально было создано для исключения _больших_ полей типа text из выборки, а не включения маленьких по одному) — но в случае особого желания доступа к элементам по именам делая большую выборку из большой базы, имхо, легче будет просто распаковать кортеж из values_list() внутри тела цикла.
*queryset с моделями, конечно
Item.objects.all().only('name')

возвращает модель с Deferred Attributes. и никаких велосипедов

Information

Rating
Does not participate
Registered
Activity