自动化平台开发小结(四)

今天对备份恢复和元数据的功能点进行了改进,突然发现需要做的事情远比想象的要多。

技术方面,目前Django的框架使用开始有一些需求的瓶颈了,因为有些需求从业务的角度来说,能够实现是极好的,但是从Django的支持层面来说,有些需求要实现就比较纠结了,比如默认的User,如果想在已有的基础上扩展,技术肯定能够实现,但是就有不少需要注意的细节,折腾一圈,基本会是这样的一个态度。

而且尤其让我有些不得力的是ORM的API,对于增删改查来说是足够了,但是我要实现一些相对复杂的统计需求的时候,这种方式就很受限了,使用raw的方式吧,有些SQL可能会写的比较长,而且查询结果很可能不需要主键,会报出下面的错误:InvalidQuery: Raw query must include the primary key

所以在这个地方又开始纠结了,甚至于想到底还有没有其他更好的ORM实现,

显然是有的,比如SQL Alchemy,还有很多公司是自己定制的ORM.

但是话说回来,Django本身很全面,强大的社区支持是很显然的。但是退一步来看,我们是否有更好或者Django也提供了一些定制的入口。

Django的流行可以参考这篇:为什么 Django 能持续统治 Python 开发世界

所以纠结贵纠结,Django的这些扩展支持是有的。比如我要实现一个复杂的查询需求。可以使用如下的方式,这个是已有的ORM显然支持不了的。

问题的背景是,有如下的备份文件,大小有的标识是M,有的是G,如果想做数据的统计,基于不同的时间维度,那么要做这件事情就需要做一些过滤了。

| aaa | 9.1G | | bbb | 11G | | ccc | 19G | | ddd | 5.8M | | eee | 5.7M |

所以我们完全可以使用自定义的方式来做,这个和很多ORM框架类似。

from django.db import connection

cursor = connection.cursor()

cursor.execute(

"SELECT truncate(sum( CASE WHEN RIGHT (backup_size, 1) = 'G' THEN CONCAT( BINARY ( substring( backup_size, 1, LENGTH(backup_size) - 1 ) ) * 1024, 'M' ) ELSE replace(backup_size,'M','') END),0) backup_size FROM test where date_format(backup_starttime,'%y-%m-%d')=date_sub(curdate(),interval 2 day) group by date_format(backup_starttime,'%y-%m-%d');");

total_size = cursor.fetchone()[0]

如此一来,我可以考虑写一个DAO层,复杂的语句和查询都可以通过这个入口来管控,而平常使用的增删改查使用Django API足矣。

如此一来,我一直比较纠结的多对多的一些映射关系和定制也有了新的思路。

可能我就可以直接基于ORM来做一些深度的定制,而不完全依赖外键关系。

明天继续大搞一场,把剩下的功能搞定。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2018-01-18

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据的力量

大索引技术,大数据的未来

不管你信也好,不信也好,大数据时代真的来临了,随着Hadoop技术的普及,其生态圈发展的越来越壮大,Hive、Hbase、Spark、Storm等的一系列新名词...

1243
来自专栏程序猿

周五推荐时间:博客3期

“ 已经推荐两期了,这是第三期,菜单可以查看往期推荐,以下博客有Java Web专题:SSM系列讲解;墙裂推荐;还有第三位,讲解了比较复杂的SQL查询是如何完成...

1101
来自专栏带你撸出一手好代码

到底该不该使用存储过程

看到《阿里巴巴java编码规范》有这样一条 ? 关于这条规范,我说说我个人的看法 我觉得用不用存储过程要视所使用的数据库和业务场景而定的,不能因为阿里巴巴的技术...

4309
来自专栏IT大咖说

你是否知道怎样借助ES在不同场景下构建数据仓库

内容来源:2017 年 11 月 25 日,数说故事平台架构团队高级工程师吴文杰在“Elastic Meetup 广州交流会”进行《Data Warehouse...

1614
来自专栏idba

数据库系统中的“黑天鹅”

一 前言 纳西姆.尼古拉斯.塔勒布的经典著作《黑天鹅》中对“黑天鹅现象”的定义是

973
来自专栏魏琼东

DotNET企业架构应用实践-数据库表记录的唯一性设计的设计兼议主键设定原则

简要介绍          在我们进行数据库设计的时候,大家都会考虑到数据表主键的设计,而可能没有人去关注记录唯一性字段设计,或者说,很多开发人员把这两种混合在...

1875
来自专栏前端儿

2016校招内推 -- 阿里巴巴前端 -- 四面面试经历

其实也没什么可说的,一面主要问基础,二面才进入项目实习之类的探讨,三面两者都有吧但还是综合多一点

1132
来自专栏java架构学习交流

java 面试,java 后端面试,数据库方面对初级和高级程序员的要求

本内容摘自 java web轻量级开发面试教程 对于合格的程序员,需要有基本的数据库操作技能,具体体现在以下三个方面。 l  第一,针对一类数据库(比如MySQ...

2307
来自专栏飞总聊IT

大数据时代的NoSQL

NoSQL这个词语伴随着云计算和大数据的出现也有一些时日,对于NoSQL和SQL的区别到底是什么,NoSQL自己又是什么,往往很多人还有一些困惑。这篇文章主要阐...

3446
来自专栏杨建荣的学习笔记

闪回区报警引发的性能问题分析(r11笔记第11天)

自从有了Zabbix+Orabbix,很多监控都有了一种可控的方式,当然对于报警处理来说,报警是表象,很可能通过表象暴露出来的是一些更深层次的问题。这不又来一个...

36910

扫码关注云+社区

领取腾讯云代金券