
I
26.01.2017
11:28:14
я же бэкендщик, люблю быть сзади =)

Anna
26.01.2017
11:29:09
бэкендщика можно за шакалинг картинок на сервере натянуть

Johnnie
26.01.2017
11:29:42
Какой сегодня озабоченный чат

I
26.01.2017
11:29:45
за это девопса ебите!

Google

I
26.01.2017
11:29:49
:D

Igor
26.01.2017
11:29:55

I
26.01.2017
11:30:04
сразу видно, как я работал, правда?

Anna
26.01.2017
11:32:33
озабоченные качеством выполняемых работ!

53r63rn4r
26.01.2017
11:32:49
Ну мб флудить в @pyflood

Anna
26.01.2017
11:39:08

Andrew
26.01.2017
12:55:38
Добрый день
вопрос про Flask marshal и sqlalchemy
если сделать
my_query = db.session.query(Mydb1).select_from(Mydb1).join(Mydb2)
вернется class (Mydb1) заранее созданый
то маршал хорошо вывод преобразует в json
но если сделать
my_query = db.session.query(Mydb1.id,Mydb2.id).select_from(Mydb1).join(Mydb2)
вернется <class 'sqlalchemy.util._collections.result'>
и маршал не преобразует это в json
как сделать правильненько?(

Denis
26.01.2017
13:00:03

Andrew
26.01.2017
13:26:23

Igor
26.01.2017
13:27:56
а зачем возвращать класс? о_О

Andrew
26.01.2017
13:28:59
а зачем возвращать класс? о_О
сейчас посути он возвращает tuple из-за этого ломается мой вывод через marshal
можно конечно чтоб возвращал json, но пока не пойму как это прикрутить

53r63rn4r
26.01.2017
13:29:07
Надо! Ну че тупишь то?
Не класс, а обьект надо, видимо, хотя хз, ванга ушла в отпуск

Google

Andrew
26.01.2017
13:30:41
мб я не так подхожу к задаче,
если проще
есть 2 таблицы
у каждой из таблиц есть одинаковое поле id надо при выводить выводить id из таблицы 2 остольное из 1
на pure sql решается легко, вот борюсь с sqlalchemy :D
да нужен объект

Igor
26.01.2017
13:31:20
в алхимии есть .label()
db.session.query(Table1, Table2.id.label('id2')).join(Table2)
че-т типа того, видимо
и потом .all(), например, и это все можно хоть в tuple, хоть в list обернуть
ну, т.е.,
list(db.session.query(Table1, Table2.id.label('id2')).join(Table2).all())
может .all() и не обязательно, хз

Stanislav
26.01.2017
13:34:30

Igor
26.01.2017
13:34:45
за ложные надежды?

Stanislav
26.01.2017
13:36:38
за ложные надежды?
Я помню пидора который вайпал треды ссылкой на ирц где цп раздавали
Я на файлообменниках кидал флажки на архивы и их банили
На страже ™

Andrew
26.01.2017
13:37:18

Igor
26.01.2017
13:37:57
¯\_(ツ)_/¯
не за что )

jdc
26.01.2017
13:39:49
На страже ™
Это ты к сосачу обращайся
По идеи то источник файлов не у юзера гитхаба

Igor
26.01.2017
14:28:32
лет зе срач бегин:
есть в проекте несколько приличных (~1000-5000 символов, 5-20 строк) raw SQL-запросов.
как вы считаете правильнее,
1) не выносить текст запросов в отдельную переменную и/или в отдельный файл, а писать сразу
cursor.execute("""SELECT ...""")
2) вынести текст запросов в отдельную переменную (или даже файл, типа constants.py или sql.py) и делать
from sql import SQL_SOME_SELECT
cursor.execute(SQL_SOME_SELECT)

Yan?
26.01.2017
14:29:33
Второе

Igor
26.01.2017
14:30:23
(запросы будут вызываться только один раз в проекте, не повторяются)

AnTi3z ??
26.01.2017
14:31:57
почему бы заранее не сделать красиво

Google

b0g3r
26.01.2017
14:33:40

Igor
26.01.2017
14:33:54
удивительно, зачем вообще спросил %)

b0g3r
26.01.2017
14:33:57
Да и по названию будет понятно чего происходит

AnTi3z ??
26.01.2017
14:35:10
другой вопрос, что SQL_SOME_SELECT это редко константа - а чаще форматированая строка
Я к тому что SQL_SOME_SELECT % somevar будет читаться не прозрачно

Igor
26.01.2017
14:37:03
не, у меня именно константы везде
но даже если форматированная строка, то SQL_SOME_SELECT.format(...)
но да, согласен, это уже не так прозрачно

b0g3r
26.01.2017
14:37:15
Хм
Но почему форматированная строка не может быть константой? Оо

AnTi3z ??
26.01.2017
14:37:50

Igor
26.01.2017
14:37:51

b0g3r
26.01.2017
14:38:11
Так, я чего-то не понимаю?)
"""...{name}...""" - не константа?

Igor
26.01.2017
14:38:43
SQL_SOME_SELECT = "SELECT {0} FROM table WHERE id = {1}"
execute(SQL_SOME_SELECT.format('name', 1)) # че здесь происходит - не факт что поймешь

b0g3r
26.01.2017
14:38:58
Ага

AnTi3z ??
26.01.2017
14:38:59
ну в SELECT обычно какая-нибудь переменная подставляется (в WHERE как правило)

b0g3r
26.01.2017
14:39:06
Ну так ты же константу не меняешь

Igor
26.01.2017
14:39:09

b0g3r
26.01.2017
14:39:35
Я бы херачил капсом

Igor
26.01.2017
14:39:37
собственно, я почему спросил. коллега доебался до того, что я вынес такие sql-запросы в constants.py

Google

Igor
26.01.2017
14:40:01
и иронично предложил сделать projects.constants, project.functions, project.classes итд %)

b0g3r
26.01.2017
14:40:08
Если это повсюду в проекте - то за один раз понимается почему формат к константам

Igor
26.01.2017
14:40:25
да и так понятно, почему формат к константам. непонятно, что этот формат будет и где менять

AnTi3z ??
26.01.2017
14:40:37
Ну так ты же константу не меняешь
вопрос про читабельность кода, когда в некую спрятанную константу подставляешь переменную (непонятно даже сколько и каких переменных надо подставлять)

b0g3r
26.01.2017
14:40:38
Ага, все, понял
Я сначала думал приебка именно к тому что эт константы)

Igor
26.01.2017
14:41:12

b0g3r
26.01.2017
14:41:38
А у IDE нет никаких фич типа одной кнопкой читать комментарии к переменной?

Igor
26.01.2017
14:42:04
по-моему пайчарм при ховере на объект показывает его определение

b0g3r
26.01.2017
14:42:09
Тогда можно было выносить всю инфу об sql в комментарий и при необходимости подглядывать

Admin
ERROR: S client not available

AnTi3z ??
26.01.2017
14:42:39
IDE бывают разные... и когда через пару лет откроешь какой-нибудь старый код в каком-нибудь новом IDE - хер вспомнишь чего и где там было спрятано

b0g3r
26.01.2017
14:42:41
А то если там 15-20 строк - там неочевидно куда и как вставляется даже если ты их видишь)
Ну эт имхо

AnTi3z ??
26.01.2017
14:44:10
Ну, если каждое обращение к такой "константе" сопроводить #комментарием - то вроде бы должно быть норм

Igor
26.01.2017
14:44:35
кстати да

Viktor
26.01.2017
15:00:36
Даже не знаю как правильно сформулировать вопрос, но попытаюсь.
Есть список int'ов.
Мне нужно итерировать по нему, беря четные и нечетные элементы одновременно в разные переменные, делаю я это так:
for a, b in zip(lst[::2], lst[1::2]): ...
Но что если у меня не 2 переменные, а 4?
for a, b, c, d in zip(lst[::4], lst[1::4], lst[2::4], lst[3::4]) вроде бы не очень красиво.
по идее я могу написать свою функцию для этого, но может есть что-то в том же itertools, чего я не заметил?

Denis
26.01.2017
15:02:08
for i in zip(*[l[j::n] for j in range(n)]):

Igor
26.01.2017
15:02:33
или через i % n можно, наверное

Google

Igor
26.01.2017
15:02:54
мне только itertools.slice (islice) в голову приходит, чтоб памяти меньше жрало, но это опционально/может не подойти

Viktor
26.01.2017
15:02:55
Работает так же

Igor
26.01.2017
15:05:12
так ничего не меняется же, просто записано более красиво
в смысле - ничего не меняется?
если их четыре, ты получишь i, который сможешь распаковать во сколько угодно переменных, надо будет по-минимуму модифицировать (если вообще надо будет) при изменении числа, на которое надо будет разбивать

Viktor
26.01.2017
15:05:50
Вот так, ничего не меняется: создаются 4 новых списка и они zipуются
А если у меня там не 4, а 10?
А если у меня там мегабайты данных?

Igor
26.01.2017
15:06:27

Viktor
26.01.2017
15:06:32
(ибо так и есть, там мегабайты данных и 10 переменных)
это больше похоже на анпакинг какой-то структуры уже...

Igor
26.01.2017
15:07:47

Viktor
26.01.2017
15:08:05
Нет

Igor
26.01.2017
15:08:10
In [5]: def foo(l, n):
...: for i in zip([l[j::n] for j in range(n)]):
...: print(i)
...:
In [8]: foo([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 2)
([1, 3, 5, 7, 9],)
([2, 4, 6, 8, 10],)
In [9]: foo([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], 5)
([1, 6],)
([2, 7],)
([3, 8],)
([4, 9],)
([5, 10],)
ты разве не так хотел?

Viktor
26.01.2017
15:08:34
нет

Igor
26.01.2017
15:08:44
блин, извини тогда, пойду перечитаю

Viktor
26.01.2017
15:09:13
1, 2, 3, 4, 5
6, 7, 8, 9, 10
11, 12, 13, 14, 15

Igor
26.01.2017
15:09:24
это при n=3?

Viktor
26.01.2017
15:09:30
n=5

Igor
26.01.2017
15:09:50
а, да

Viktor
26.01.2017
15:10:20
Вообще у меня там не совсем список, а bytes
И кажется я могу просто использовать struct.iter_unpack
да
Эта группа больше не существует