python实现一次性封装多条sql语句(begin end)
作者:上世纪的诺言 发布时间:2022-09-27 13:20:34
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]
来源:https://blog.csdn.net/qq_36357814/article/details/89948603


猜你喜欢
- 经常会遇到下载的文件或电子书,名字中间都包含了一些网址信息,实际使用中由于名字太长不方便,下面的脚本使用正则表达式来对目录下的所有文件重命名
- 本文主要讨论了python中getpass模块的相关内容,具体如下。getpass模块昨天跟学弟吹牛b安利Python标准库官方文档的时候偶
- 目录ORM是什么实现ORM中的insert功能完善对数据类型的检测抽取到基类中添加数据库驱动执行sql语句添加数据库驱动执行sql语句测试功
- 一、前言在Python中,类表示具有相同属性和方法的对象的集合。在使用类时,需要先定义类,然后再创建类的实例,通过类的实例就可以访问类中的属
- 前言亲人工作考试,公司给的题库好像是直接从数据库导出的表格Excel形式,在移动端上非常难看,需要不断左右上下滑动,看不了多少题眼就瞎了,遂
- 前段时间开始学习JSON在ASP中的使用,JSON确实比XML方便。以前在写程序的时候有考虑使用XML来存储数据,但是一直觉得生成文档及文档
- #!/usr/bin/env python# -*- coding:utf-8 -*-#导入random和string模块import ra
- Oracle按不同时间分组统计的sql如下表table1: 日期(exportDate) &nbs
- .whl文件解释whl文件时以wheel格式保存的python安装包,Wheel是Python发行版的标准内置包格式。WHL文件包含Pyth
- PPOCRLabel标注的txt格式转换成labelme能修改的json格式PPOCR是个好东西默认的训练文件是用自带的PPOCRLabel
- 突然想到写这个话题,是基于最近在设计产品界面时,年糕一直在给我们灌输设计的品牌概念以及文化内涵要求而产生的,因之前在界面设计中也遇到一些困惑
- cache 是一个带索引带超时的缓存库目的在于优化代码结构,提供了若干实践。 https://github.com/weapons
- 本文实例讲述了JS实现FLASH幻灯片图片切换效果的方法。分享给大家供大家参考。具体实现方法如下:<!DOCTYPE html PUB
- 在Unix和NetWare中推荐使用mysqld_safe来启动mysqld服务器。mysqld_safe增加了一些安全特性,例如当出现错误
- sysdate+(5/24/60/60) 在系统时间基础上延迟5秒 sysdate+5/24/60 在系统时间基础上延迟5分钟 sysdat
- matplotlib简介如果你在大学里参加过数学建模竞赛或者是用过MATLAB的话,相比会对这一款软件中的画图功能印象深刻。MATLAB可以
- 1、使用函数shutil.make_archive()创建归档文件,并返回归档后的名称。import shutilpath_1 = r
- 使用vscode的过程中 自己或者push代码以后 代码的格式可能会出现错乱,作为一个成熟的开发 , 当然应该遵守一些代码规范, 首先代码整
- 一、功能这里的需求是,判断摄像头有没有被物体遮挡。这里只考虑用手遮挡---->判断黑色颜色的范围。二、使用OpenCV的Mat格式图片
- 官方文档: http://openpyxl.readthedocs.io/en/default/OpenPyXL库 --单元格样式设置单元格