什么是获取以下信息的正确查询

时间:2020-08-30 19:44:13

标签: 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代码当前生成前端的图像 enter image shere 下面是表格的图片:

enter image description here

1 个答案:

答案 0 :(得分: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]})