如何在Flask中实现数据分组流程详解
作者:圈圈圈小明 发布时间:2021-11-15 06:53:59
【数据库模型类】
class ConColumn(db.Model):
__tablename__='content_column'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
pid = db.Column(db.Integer)
parent_name = db.Column(db.String(50), nullable=False)
......
# 和文章的关系
articles = db.relationship('Article', backref="content_article")
class Article(db.Model):
__tablename__ = 'content_article'
id = db.Column(db.Integer, primary_key=True)
#columnId = db.Column(db.String(11), nullable=False)
photoUrl = db.Column(db.String(300))
fileUrl = db.Column(db.String(300))
create_time = db.Column(db.DateTime, default=datetime.now)
......
# 外键
columnId = db.Column(db.Integer, db.ForeignKey("content_column.id"), nullable=False)
想要在flask实现两个表联合查询,得到Article表的id,photoUrl,fileUrl,ConColumn表的name
按照Article的create_time倒排序,该如何写查询?
【循环展示】
目标:同一ConColumn的表的相同的name放在一行显示
2021(ConColumn表的name)
图片1(地址是photoUrl) 图片2(地址是photoUrl) 图片3(地址是photoUrl)
2020(ConColumn表的name)
图片1(地址是photoUrl) 图片2(地址是photoUrl) 图片3(地址是photoUrl)
2016(ConColumn表的name)
图片1(地址是photoUrl) 图片2(地址是photoUrl) 图片3(地址是photoUrl)
【数据库中的数据:】
22 11 学而思 0 ... ...
23 15 TSM 0 ... ...
24 16 CATL 0 ... ...
25 16 锦浪 0 ... ...
字段的顺序依次是id,columnId,title,detail,is_top,photoUrl,fileUrl
class Article(db.Model):
__tablename__ = 'content_article'
id = db.Column(db.Integer, primary_key=True)
...
columnId = db.Column(db.Integer, db.ForeignKey("content_column.id"), nullable=False)
def findArticleGroup(self, column_id):
children_ids = [11, 12, 13, 14, 15, 16, 17]
articles = (
Article.query.join(ConColumn, Article.columnId == ConColumn.id)
.filter(Article.columnId.in_(children_ids), Article.is_top == 0)
.with_entities(Article.id,Article.photoUrl, Article.fileUrl, ConColumn.name)
#.group_by(ConColumn.name)
.order_by(Article.create_time.desc())
.all()
)
对应的sql
SELECT content_article.id AS content_article_id, content_article.`photoUrl` AS `content_article_photoUrl`, content_article.`fileUrl` AS `content_article_fileUrl`, content_column.name AS content_column_name
FROM content_article INNER JOIN content_column ON content_article.`columnId` = content_column.id
WHERE content_article.`columnId` IN (11,12,13,14,15,16,17) AND content_article.is_top = 0
ORDER BY content_article.create_time DESC
logging.getLogger('sqlalchemy.engine').setLevel(logging.DEBUG) # 将日志级别设置为 debug
【问题】
1.设置日志级别的语句是放在这里吗?然后在哪里查看日志
2.这个分组查询中,符合条件的数据应该是4条,但是分组之后的数据把id=25的数据丢失了,不知什么原因。
【回答】
如果没有在控制台中看到 SQL 语句,那可能是你的日志级别设置过高了。这种情况下,重新设置日志级别即可,例如:
可以在控制台中查看 SQL 语句。关于查询中 id=25 的数据丢失的问题,应该是在分组查询中出了问题。请检查一下在查询的时候,是否漏选了某些条件,是否有其他查询导致该数据被过滤了掉等等。可以将 group_by(ConColumn.name) 语句删除掉试试看是否能查到 id=25 的数据,或者将 group_by 语句修改为 group_by(Article.id),以便更好地定位问题。
import logging
logging.basicConfig()
logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO) # 重新设置为 INFO 级别
这样就可以在控制台输出 SQL 语句了。如果仍然无法输出 SQL 语句,可能是数据库配置方面的问题,你可以查看你使用的数据库的文档,了解更多日志输出配置方面的信息。
【前端(vue)】
<div v-for="(item, index) in tableData" :key="index">
<div class="MasonryList-title">{{ item.parentName }}</div>
<div class="wrapper">
<div v-for="(file, index) in item.files" :key="index">
<div class="child">
<img
class="imgStyle"
:src="file.categorieIcon"
@click="getNewsDetail(file.fileUrl)"
/>
</div>
</div>
</div>
来源:https://blog.csdn.net/wenxi2367/article/details/130532818


猜你喜欢
- GitHub : https://github.com/jayknoxqu/id-number-util身份组成方式中华人民共和国国家标准G
- Django是一个基于Python Web框架的高级Web框架,允许快速开发和干净,务实的设计。今天,我们将创建一个待办事项应用程序,以了解
- 本文实例讲述了js中forEach,for in,for of循环的用法。分享给大家供大家参考,具体如下:一、一般的遍历数组的方法:var
- 数据结构typedef struct { PyObject_VAR_HEAD Py_ha
- 问题你的包中包含代码需要去读取的数据文件。你需要尽可能地用最便捷的方式来做这件事。解决方案假设你的包中的文件组织成如下:mypackage/
- 1、JS正则表达式一条龙讲解(从原理和语法到JS正则) https://www.aspxhome.com/article/1105
- this指向当前作用域的对象,如果找不到,往上一层找,直到window。this 关键字很好用,很灵活,正因为很灵活,所以一不小心你就会掉进
- 问: 如果数据表中有时间字段,现在要迁移到其他时区的服务器上,该如何处理呢?答:在高版本的mysqldump中,新增了一个选项:--tz-u
- 本文实例讲述了python动态参数用法。分享给大家供大家参考。具体分析如下:先来看一段代码:class Person: &nb
- Python自动化脚本登录校园网所需工具:python编译环境(博主使用的pycharm作演示,其实在cmd也可以操作!)selenium自
- 日期时间转字符串Select CONVERT(varchar(100), GETDATE(), 0): 05 16 2006 10:57AM
- 前言本文仅仅介绍了常见的一些JS加密,并记录了JS和Python的实现方式常见的加密算法基本分为这几类:(1)base64编码伪加密(2)线
- 因为工作需求,需要审核一部分query内容是否有效,query储存在Excel中,文本内容为页面的Title,而页面的URL以HyperLi
- Oracle DECODE函数功能很强,下面就为您详细介绍Oracle DECODE函数的用法,希望可以让您对Oracle DECODE函数
- 什么是上采样上采样,在深度学习框架中,可以简单的理解为任何可以让你的图像变成更高分辨率的技术。 最简单的方式是重采样和插值:将输入图片inp
- 代码如下:'===================================== '获得文件后缀 '=====
- 创建一个apps包 专门来放子应用创建users子应用 处理用户事务追加导包路径在settings中用 print(sys.path) 查看
- Python 中常用的数据类型包括:数字类型:包括整型(int)、长整型(long)、浮点型(float)、复数型(comple
- 在本文中,我将分享五个 Jupyter 扩展来提大家的工作效率。 欢迎收藏学习,喜欢点赞支持。技术交流群文末提供,欢迎畅聊。让我们开始吧!1
- 修改python plot折线图的坐标轴刻度,这里修改为整数:代码如下:from matplotlib import pyplot as p