LINUX.ORG.RU

SQL запрос и python

 ,


0

1

Есть бд с записями типа

+-----+-----------+
| id  | hash      |
+-----+-----------+
| 425 |   7251460 |
| 425 |  19468101 |
| 425 |  31448815 |
| 426 | 154757581 |
| 426 | 181670686 |
| 426 | 183141099 |
| 427 | 199589841 |
| 427 | 231307707 |
| 427 | 373036439 |
| 427 | 392853688 |
+-----+-----------+

Мне нужно загрузить эти данные в такой список

[425, [7251460, 19468101, 31448815]]
[426, [154757581, 181670686, 183141099]]
[427, [199589841, 231307707, 373036439, 392853688]]

Можно это с помощью sql запроса сделать или надо после выгрузки из базы наполнять список по какому-то циклу? что-то в голову ничего не лезет :(



Последнее исправление: samson_b (всего исправлений: 1)

Ответ на: комментарий от menangen

crutch_master, спасибо за sql query, он действительно, то что надо, но у меня не получается обрабатывать данные, которые мне выдает sql.

Я получаю результат таким образом:

[(425, '7251460764891779,19468101502718259,31448815253539637'), 
(434, '7223423423434234,234234234234234,223423423445234234'),
....
(4454, '7223423423434234,234234234234234,223423423445234234')]

а мне нужно так-то так

[[425, [7251460, 19468101, 31448815]],
[426, [154757581, 181670686, 183141099]],
[427, [199589841, 231307707, 373036439, 392853688]]]

Можно это как-то просто сконвертировать?

samson_b
() автор топика
Ответ на: комментарий от crutch_master

СУБД MySQL

Вот так сделал:

cursor.execute('select id, group_concat(hash) from hashes group by id;')
hash_list_bulk = cursor.fetchall()
hash_list = []
for i in hash_list_bulk:
    hash_list.append([i[0], [int(n) for n in i[1].split(',')]])

Работает, но выглядит так себе. Это получается мне после выгрузки из базы надо еще раз пройтись по ним переформатировать.

samson_b
() автор топика
Последнее исправление: samson_b (всего исправлений: 1)
Ответ на: комментарий от samson_b

Это получается мне после выгрузки из базы надо еще раз пройтись по ним переформатировать.

Ну, а кому сейчас легко?

crutch_master ★★★★★
()

Что если ты сделаешь цикл по уникальным id, и будешь добавлять результат с уже ясным id и соотносящемся к нему массивом? Что тебя смущает в цикле - получается низкая производительность уже сейчас?

Я к тому, что быть может ты хочешь это для удобства, предполагая что есть простое решение, но реальной необходимости нет

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

Я думал, что смогу выгрузить данные из mysql сразу в нужные мне переменные, а тут получается парсить надо.

Ну надо, так надо.

samson_b
() автор топика
Ответ на: комментарий от samson_b

У тебя к тому же в форме строки эти результаты валятся? Парсить строки из базы когда они там цифры это жесть, не надо так. Сначала сделай чтобы готовый массив шел, или хотя бы в цикле забирай элементы, это точно будет быстрее чем вот так по строкам

А уж как цикл организовать - смотри сам, может у тебя в процессе число id меняется. Можно тогда просто по row id пробежаться и добавлять в словарь, тоже быстрее чем строки ковырять будет

I-Love-Microsoft ★★★★★
()

В ANSI SQL такого сделать нельзя.

byko3y ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.