基于 oracle 的 flask 项目(三)——生成报表

曾经,因为对 sqlalchemy 不熟悉,固执的抛弃之,直接引入原生的 cx_Oracle 来生成报表,但是经过一堆的“上下文等”错误后,我幡然悔悟,还是回到了 sqlalchemy 的怀抱来。
认真学习 sqlalchemy,你会发现意想不到的惊喜。本文主要讲解如何生成不同需求的报表。

项目描述

  • 第一个页面,以 OusiStaff.phone 和 OusiGuest.staff_phone 为关联,查询出本月职工的关联客户及客户的本月及上月资产余额。
  • 第二个页面,以 OusiStaff.phone 和 OusiGuest.staff_phone 为关联,查询出每个职工所有关联的客户的本月资产、上月资产及本月管户资产增额。
  • 具有管理员权限的员工可以看到本部门下面所有员工的相关信息,非管理员权限的员工只能查看自己的相关信息
  • 查询功能留给下一章详细讲解。

建立报表模板

不在赘述。详情请下载代码查看。

实现第一个页面

建立第一个页面的试图函数

第一个页面使用sqlalchemy查询比较简单,关键点是:

  • 区分权限。
  • 联表查询。
  • 建立上个月的虚字段。
  • 分页显示。
  • 查询嵌套。

views.py 内容:

@show.route('/01', methods = ['GET', 'POST'])
@login_required
def _01():
    g1 = aliased(OusiGuest) # 重复用到该数据库,需要设置别名。
    g2 = aliased(OusiGuest) # 重复用到该数据库,需要设置别名。
    page = request.args.get('page', 1, type=int) # 分页
    if current_user.role == 'admin': # 区分权限
        database = db.session.query(OusiStaff.department, OusiStaff.name.label('staff_name'), OusiStaff.phone,
                                    OusiStaff.role,
                                    g1.name.label('guest_name'), g1.month, g1.balance,
                                    func.nvl(db.session.query(g2.balance).filter(
                                        g1.name == g2.name,
                                        func.to_date(g2.month, 'yyyy-mm') == func.add_months( func.to_date(g1.month, 'yyyy-mm'), -1)
                                    ), 0).label('last_balance')
                                    ).filter(
            OusiStaf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东方鹗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值