#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 в настоящее время генерирует во внешнем интерфейсе
Ниже приведено изображение таблицы:
Комментарии:
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