Какой правильный запрос для получения приведенной ниже информации

#postgresql #flask #sqlalchemy #flask-sqlalchemy

#postgresql #flask #sqlalchemy #flask-sqlalchemy

Вопрос:

 #id | title | series | series_position | author | img_url | object_key | e_tag | page_number
  

Учитывая, что у меня есть столбец таблицы выше, каким был бы правильный запрос для получения следующего порядка данных из одного запроса:

 [author1:{
    [series1:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]],
    [series2:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]],
    [series3:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]]]
},
author2:{
    [series1:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]],
    [series2:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]],
    [series3:[{title:title1,series_position:1},{title:title2,series_position:2},{title:title3,series_position:3}]]]
}]
  

В настоящее время я делаю что-то вроде этого:

 books = Books.query.order_by(Books.author).all()
authors = sorted(set(book.author for book in books))
  

После чего я делаю что-то вроде приведенного ниже псевдокода для отображения данных в jinja:

 {%for author is authors%}:
<div id={{author}}>
    for book in books
        if author in book.author:
            <li><a>book.title,book.series,book.series_position</a></li>
</div>

{%endfor%}

  

Ниже приведено изображение того, что приведенный выше код jinja в настоящее время генерирует во внешнем интерфейсе
введите изображение shere
Ниже приведено изображение таблицы:

введите описание изображения здесь

Комментарии:

1. Список (пример ниже) неверен, может быть, вам нужен словарь? [автор1:{ [серия1:

2. Это псевдо-список / словарь .. тип данных на данный момент не так важен, как структура данных / порядок @archer

3. хорошо, итак, вы хотите, чтобы какой-нибудь sql-запрос извлекал все данные сразу, или любой python-код, который выполняет эту работу, в порядке?

4. sql-запрос / код python в порядке. Это не «извлекать все эти данные», это больше похоже на извлечение всех этих данных при сохранении вышеуказанной структуры.

Ответ №1:

Это должно дать желаемую структуру данных (в формате словаря):

 import pandas as pd
conn=... #your sql connection to your database here
df=pd.read_sql('select * from Books', conn)
d={}
for i in set(df.author):
    d[i]={}
    df2=df[df.author==i]
    for k in set(df2.series):
        d[i][k]=[]
        df3=df2[df2.series==k]
        for j in range(len(df3)):
            d[i][k].append({'title':df3['title'].iloc[j], 'series_position':df3['series_position'].iloc[j]})
  

Комментарии:

1. приведенный выше код не работает. Для этого и нужен понижающий голос. Хотя приведенный выше код как бы дает мне представление о том, в каком направлении следует работать. Для этого. Спасибо! @archer

2. Я внес некоторые изменения, пожалуйста, проверьте это еще раз

3. Спасибо за повторную попытку, однако на данный момент я не могу полностью ее изучить. Вот сообщение об ошибке, которое является результатом вашего кода. Файл «C:UsersakibrDesktopPythonPracticeposGresSqlapproutes.py «, строка 22, в индексе для i в наборе (df.author): AttributeError: объект ‘list’ не имеет атрибута ‘author’

4. Да, извините за мою ошибку. Я добавил несколько строк в начале, теперь это должно сработать

5. Спасибо! @archer