python实现一次性封装多条sql语句(begin end)


Posted in Python onJune 06, 2020

python封装利用begin end执行多条sql

因为业务需求,优化模型运行时间。考虑到sql语句每一次执行都要建立连接,查询,获取数据耗时过多。就想到将sql一起提交上去运行,能够节省很多时间。原本1.6-2.5秒耗时的sql语句经过修改后时间降到0.3-0.6秒,感觉性能提升挺好的。

当然还有一种想法,如果有python框架的orm可能会更快,相比来说耗时基本看不到了吧,这只是我的猜想,仅仅为了优化一个模型写一个框架的话 代码可能需要改的比较多,自我感觉付出和收获不一定会成正比,当然以后有时间可以试试。

这次优化基本代码逻辑没有动,利用了begin end进行sql整合。

公司用的是oracle,之前没用过但是感觉和mysql基本类似,如果是mysql的话该方法也可用

sql_str = ‘begin\n'
sql_str += ‘这里时需要执行的sql语句'
sql_str += ‘\ncommit;end;'

中间sql有多少条无所谓,看了一下运行时间感觉 我的一千行sql耗时 几乎就是这一千行里面耗时最长那个时间。是异步完成还是什么这个就不是很清楚了,主要是一次建立连接,省去网络传输数据和请求数据库的过程

网上好多begin end都是在可视化工具中的sql执行的,并不能在command中执行,这就意味中我们代码中封装的语句没有卵用,还好没放弃当时就研究了一下找到了解决办法

在end 提交一下就ok了,如果在command中运行一直未结束的话加一个 / 斜线就ok了

本次内容就此结束,下面是一些题外话。

在说一个其中遇到的问题吧,在进行sql封装后,其中很多表都很乱,约束很乱 而且逻辑并不严谨,但是模型正在运行还不让动 那只能按照这个规则来了

ORA 00001 违反唯一约束条件 其中出现了这个问题,意思就是唯一约束重复了,因为模型输入问题,处理出来的结果之前可能刚插入到数据库中(也就是 上面的sql_str 出现了两天相同的insert),这个东西很简单,加一个set判断一下就行,但是到这之后,一个bug就跳出来了,这个脚本计算的是因子重要度,结果预测可能每次都不相同,有些数据很小的可能就当成0扔进去了,所以我需要做的是将 相同数据的情况下插入较为重要的因子重要度(也无需要 ),这样的话简简单单的set就不行了,但是也不难 用来一下字典

importance_map = {}
 实现创建好字典
 if feature in importance_map:
        if importance_map[feature] < importance:
          sql_str +=‘***************‘'' 这里就是insert语句了
        else:
          continue
      else:
        importance_map[feature] = importance

其实这个东西也没有什么难点,但是做到这之后就有很多想法折射出来。

数据处理原本也可以用pandas进行,但是pandas是对所有数据进行操作,我一个set只对重复数据进行操作,切pandas内存消耗极为严重,前两天写的特征工程内存炸裂。表数据用完后内存并没有得到释放,这里面就涉及到python的垃圾回收,用法至今没有搞懂,还需要研究研究,gc是对循环引用进行垃圾回收,内存释放。但是这个pandas并不是循环引用,我认为是在存储在缓存区中,位置占死了,就很烦

模型毕竟是在服务器上面跑,尽量快切省内存,不然你把内存占了 别人的项目怎么玩。所以就用这种方法。

很少写博客,主要是记录一下问题以后 再出现了好应对。当然如果能够帮助正在修复bug中的你,也是乐意至极。那块说的有问题或者解释不清楚,可以留言。

补充知识:postgreSQL sql使用 %s时务必加引号,即为‘%s',否则报错

postgre sql使用 %s时务必加引号,即为‘%s',否则报错

if name == ‘main':

t="TDD-LTE_MRO"
sql="select * from lastftp where enbid = %d and keytype = %s"%(110001,t)

print(selectOperate(sql))

结果:

Traceback (most recent call last):
File “/home/eyann/mypython/t1/pgSQLoperate.py”, line 84, in
print(selectOperate(sql))
File “/home/eyann/mypython/t1/pgSQLoperate.py”, line 45, in selectOperate
cursor.execute(sql)
psycopg2.ProgrammingError: column “tdd” does not exist
LINE 1: …* from lastftp where enbid = 110001 and keytype = TDD-LTE_MR…
^

if name == ‘main':

t="TDD-LTE_MRO"
sql="select * from lastftp where enbid = %d and keytype = '%s'"%(110001,t)

print(selectOperate(sql))

结果:

[(‘test3', ‘TDD-LTE_MRO', ‘0114123000', ‘0012', 110001)]
[Finished in 0.1s]

以上这篇python实现一次性封装多条sql语句(begin end)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
利用Python自带PIL库扩展图片大小给图片加文字描述的方法示例
Aug 08 Python
Python及Django框架生成二维码的方法分析
Jan 31 Python
Django中间件工作流程及写法实例代码
Feb 06 Python
使用Python的Dataframe取两列时间值相差一年的所有行方法
Jul 10 Python
Pycharm保存不能自动同步到远程服务器的解决方法
Jun 27 Python
Python脚本利用adb进行手机控制的方法
Jul 08 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
Python3.6实现根据电影名称(支持电视剧名称),获取下载链接的方法
Aug 26 Python
python super用法及原理详解
Jan 20 Python
python GUI库图形界面开发之PyQt5布局控件QHBoxLayout详细使用方法与实例
Mar 06 Python
Django model.py表单设置默认值允许为空的操作
May 19 Python
python flappy bird小游戏分步实现流程
Feb 15 Python
python 在sql语句中使用%s,%d,%f说明
Jun 06 #Python
解决python 执行sql语句时所传参数含有单引号的问题
Jun 06 #Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
Jun 06 #Python
python 解决mysql where in 对列表(list,,array)问题
Jun 06 #Python
在python中使用pyspark读写Hive数据操作
Jun 06 #Python
使用Python构造hive insert语句说明
Jun 06 #Python
Python通过kerberos安全认证操作kafka方式
Jun 06 #Python
You might like
以文本方式上传二进制文件的PHP程序
2006/10/09 PHP
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
php中通过数组进行高效随机抽取指定条记录的算法
2013/09/09 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
Javascript 复制数组实现代码
2009/11/26 Javascript
JS 实现列表与多选框选择附预览动画
2014/10/29 Javascript
node.js中的url.format方法使用说明
2014/12/10 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
AngularJS快速入门
2015/04/02 Javascript
Bootstrap每天必学之按钮(一)
2015/11/24 Javascript
Node.js编写组件的三种实现方式
2016/02/25 Javascript
jQuery实现图片局部放大镜效果
2016/03/17 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
Js实现京东无延迟菜单效果实例(demo)
2017/06/02 Javascript
详解微信小程序中组件通讯
2018/10/30 Javascript
详解webpack编译速度提升之DllPlugin
2019/02/05 Javascript
jquery将信息遍历到界面上实例代码
2020/01/21 jQuery
JavaScript实现好看的跟随彩色气泡效果
2020/02/06 Javascript
浅谈React中组件逻辑复用的那些事儿
2020/05/21 Javascript
详解Vue中的MVVM原理和实现方法
2020/07/15 Javascript
[42:52]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
win7安装python生成随机数代码分享
2013/12/27 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
2018/04/19 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
python 正则表达式贪婪模式与非贪婪模式原理、用法实例分析
2019/10/14 Python
Python三元运算与lambda表达式实例解析
2019/11/30 Python
10分钟理解CSS3 FlexBox弹性布局
2018/12/20 HTML / CSS
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
吉力贝官方网站:Jelly Belly
2019/03/11 全球购物
应用艺术专业个人的自我评价
2014/01/03 职场文书
十佳文明家庭事迹
2014/05/25 职场文书
刑事案件上诉状
2015/05/23 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
同学聚会感言一句话
2015/07/30 职场文书
Apache压力测试工具的安装使用
2021/03/31 Servers