1. 字段分组、统计和排序

  • 在调用func.count()函数时,count选择没有Null的字段,以选择id为最好,其次为常量值(func.count(1))。
  • 如果选择func.count(DataTable.con_author),当con_author为NULL的时候,统计结果为0。是不符合要求的。
# 按照作者分类统计
def author_stat():
    # value_name_list = db.session.query(DataTable.con_author, func.count(DataTable.con_author)). \
    value_name_list = db.session.query(DataTable.con_author, func.count(1)). \
        group_by(DataTable.con_author).\
        order_by(func.count(1).desc()).all()
    print("In author_stat() value_name_list: %s" % value_name_list)
    return value_name_list

2. 按DateTime字段的年或月或日进行group_by查询

查询2016年5月每天的数据。
参考

# 按照某一天进行统计,只能是1--31之间
# start_day:某年某月的第一天,datetime类型
# end_day:某年某月的最后一天,datetime类型
res = db.session.query(extract('day', DataTable.data_time).label('day'), func.count(DataTable.data_id)) \
        .filter(DataTable.data_time.between(start_day, end_day)) \
        .group_by('day').all()

3. 按DateTime字段的年月日进行group_by查询

# 按照YYYYMMDD进行统计,可以有很多种
res = db.session.query(func.date_format(DataTable.data_time, '%Y-%m-%d').label('date'),
                       func.count('*').label('cnt')).\
                        filter(DataTable.data_time.between(start_day, end_day)).\
                        group_by('date').all()

参考链接:

# 将时间格式化方法
func.date_format(Table.create_time, "%Y-%m-%d %H:%i:%s")
# 将时间戳转化成时间
func.from_unixtime((Table.timestamp), "%Y-%m-%d %H:%i:%s")

4. python得到特定时间段内,每一天的列表

def time_quantum_list(begin_date=None, end_date=None):
    if (begin_date is None) or (begin_date == ''):
        return []
    if end_date is None:
        end_date = datetime.datetime.now().strftime('%Y-%m-%d %H-%M-%S')
    dt_begin_date = datetime.datetime.strptime(begin_date, '%Y-%m-%d %H-%M-%S')
    dt_end_date = datetime.datetime.strptime(end_date, '%Y-%m-%d %H-%M-%S')
    print("dt_start_day:%s, dt_end_day: %s" % (dt_begin_date, dt_end_date))
    print("dt_start_day:", type(dt_begin_date), " dt_end_day:", type(dt_end_date))
    date_list = []
    if dt_begin_date > dt_end_date:
        return date_list
    while dt_begin_date <= dt_end_date:
        str_date = dt_begin_date.strftime('%Y-%m-%d')
        date_list.append(str_date)
        dt_begin_date += datetime.timedelta(days=1)
    return date_list

参考链接:python得到两个时间段的每一天的列表

5. query.filter()的常用方法

关于query.filter()的一些常用的方法

6. SQLAlchemy高级查询

SQLAlchemy -高级查询

@创建日期:2020.03.31@修改日期:2020.03.31文章目录1. 字段分组、统计和排序2. 按DateTime字段的年或月进行group_by查询3. query.filter()的常用方法4. 高级查询1. 字段分组、统计和排序在调用func.count()函数时,count选择没有Null的字段,以选择id为最好,其次为常量值(func.count(1))。如果选择fu... SQLAlchemyPython编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果。最近在使用SQLAlchemy排序遇到了一个坑,所以想着总结下来,分享给更多的朋友,下面来一起看看吧。 query = db_session.query(UserVideo.vid, UserVideo.uid, UserVideo.v_width, UserVideo.v_height, UserVideo
网站发布的文章想按发布时间最新排序,还有网站想按点击数量大小进行排序.......排序在网站开发项目用的非常频繁。下面阿汤哥就为大家讲解下sqlalchemy 三种排序方式。老规矩,我们先定义一个Arctire模型(代码如下),并映射到数据库。class User(Base):    __tablename__ = "user"    id = Column(Integer , primary...
select count(*) as "total", sum(case when upgrade_status='failed' then 1 else 0 end) as "failed_count", sum(case when upgrade_status='unstarted' then 1 else 0 end) as "unstarted_count", sum(case wh # count distinct project by project.name # using a subquery db.session.query(sqlalchemy.func.count(distinct(Project.name))).scalar() # usi... # MongoDB query = {"mark": {"$gte": grade[0], "$lte": grade[-1]}} data1 = list(current_app.mongo.db.exam.aggregate([ {"$match": query}, {"$bucket": { "groupBy": "$grade", "boundarie 按照时间降序,这两种写法亲测完全没有问题。 articles = Article.query.order_by(Article.create_time.desc()).all() articles = Article.query.order_by(db.desc(Article.create_time)).all() 网上还有种写法,我试了一直报错...
mysql语句 1、GROUP BY基本语法格式: GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组字段值相等的为一组。基本的语法格式如下: GROUP BY 属性名 [HAVING 条件表达式] [WITH ROLLUP] 属性名:是指按照该字段的值进行分组。 HAVING 条件表达式:用来限制分组后的显示,符合条件表达式的结果将被显示。 WITH ROLLUP:将会在所有...
#简单查询     print(session.query(User).all()) print(session.query(User.name, User.fullname).all())     print(session.query(User, User.name).all())         #带条件查询     print(sessi ```python session.query(Table1).join(Table2, Table1.column == Table2.column, isouter=True) 其,`Table1` 和 `Table2` 分别表示要进行连接的两个表,`column` 表示连接的列,`isouter=True` 表示进行左连接操作。 conda config --set 键 值 conda config --add channels http://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/win-64 conda config --set show_channel_urls yes anaconda3创建虚拟环境时出现问题:Collecting package metadata (repodata.json): failed 88真白: 为什么我还是没解决这个问题,怎么办 paddleNLP 安装 baye~: - 中国科学技术大学 : https://pypi.mirrors.ustc.edu.cn/simple paddleNLP 安装 圆周率的后六位: 官网给的是这个https://www.paddlepaddle.org.cn/install/quick?docurl=/documentation/docs/zh/install/pip/windows-pip.html paddleNLP 安装 圆周率的后六位: 我是在百度studio上面安装的 还是不行