我在工作中经常使用Python,特点很明显,轻量,效率还不错,尤其在维护或者自动化方面。

下面是我使用到的访问数据库(Oracle、Sqlserver、PostgreSQL)的公共类。

一、Oracl访问类

import cx_Oracle

class DBOrc:
# Oracle 连接工具
SHOW_SQL = True def __init__(self, host, port, user, password, sid):
self.host = host
self.port = port
self.user = user
self.password = password
self.sid = sid
self._conn = None
self .__GetConnect() def __GetConnect(self):
if not self._conn:
dsn_tns = cx_Oracle.makedsn(self.host, self.port, self.sid)
dsn_tns = dsn_tns.replace('SID', 'SERVICE_NAME')
self._conn = cx_Oracle.connect(self.user, self.password, dsn_tns)
else:
pass def __del__(self):
if self._conn:
self._conn.close()
self._conn = None def _NewCursor(self):
cur = self._conn.cursor()
if cur:
return cur
else:
print("#Error# Get New Cursor Failed.")
return None def _DelCursor(self, cur):
if cur:
cur.close() # 检查是否允许执行的sql语句
def _PermitedUpdateSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2):
if 'WHERE' not in sql_elems2:
rt = False
return rt def _commit(self):
self._conn.commit() def _rollback(self):
self._conn.rollback() # 检查是否允许执行的sql语句
def CheckSelectSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2 or 'INSERT' in sql_elems2):
rt = False
return rt # 查询
def Query(self, sql, nStart=0, nNum=- 1):
rt = []
# 获取cursor
cur = self._NewCursor()
if not cur:
return rt
# 查询到列表
print(sql)
cur.execute(sql)
if (nStart == 0) and (nNum == 1):
rt.append(cur.fetchone())
else:
rs = cur. fetchall()
if nNum == - 1:
rt.extend(rs[nStart:])
else:
rt.extend(rs[nStart:nStart + nNum])
# 释放cursor
self._DelCursor(cur)
return rt # 更新
def Exec(self, sql):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
# 判断sql是否允许其执行
if not self._PermitedUpdateSql(sql):
return rt
# 执行语句
print(sql)
try:
rt = cur.execute(sql)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 更新list
def Execlist(self, sqls):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
try:
for i in sqls:
# 判断sql是否允许其执行
if len(i.strip()) < 1:
continue
if not self._PermitedUpdateSql(i):
self._rollback()
return rt
# 执行语句
print(i)
rt = cur.execute(i)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 导出结果为文件
def Export(self, sql, file_name, colfg='||'):
rt = self. Query(sql)
if rt:
with open(file_name, 'a') as fd:
for row in rt:
ln_info = ''
for col in row:
ln_info += str(col) + colfg
ln_info += '\n'
fd .write(ln_info)

oracle版本使用方法:

# 查询单个sql
orc = DBOrc(host, port, db, user, password)
sql = "select c1,c2,c3 from table1"
orc.Query(sql ) # 更新单个sql
sql = "update table1 set c1=0"
orc.Exec(sql ) # 更新多条sql
sqllist = []
sqllist.append("update table1 set c1=0")
sqllist.append("update table1 set c2=0")
orc.Execlist(sqllist)

二、Sqlserver访问类

import pymssql
from pymssql import _mssql
from pymssql import _pymssql class DBMSS:
# MSS 连接工具
def __init__(self, host, port, user, password, db):
self.host = host+":"+port
self.user = user
self.password = password
self.db = db
self._conn = None
self .__GetConnect() def __GetConnect(self):
if not self._conn:
self._conn = pymssql.connect(host=self.host, user=self.user, password=self.password, database=self.db, charset="utf8")
else:
pass def __del__(self):
if self._conn:
self._conn.close()
self._conn = None def _NewCursor(self):
cur = self._conn.cursor()
if cur:
return cur
else:
print("#Error# Get New Cursor Failed.")
return None def _DelCursor(self, cur):
if cur:
cur.close() # 检查是否允许执行的sql语句
def _PermitedUpdateSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2):
if 'WHERE' not in sql_elems2:
rt = False
return rt def _commit(self):
self._conn.commit() def _rollback(self):
self._conn.rollback() # 检查是否允许执行的sql语句
def CheckSelectSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2 or 'INSERT' in sql_elems2):
rt = False
return rt # 查询
def Query(self, sql, nStart=0, nNum=- 1):
rt = []
# 获取cursor
cur = self._NewCursor()
if not cur:
return rt
# 查询到列表
print(sql)
cur.execute(sql)
if (nStart == 0) and (nNum == 1):
rt.append(cur.fetchone())
else:
rs = cur. fetchall()
if nNum == - 1:
rt.extend(rs[nStart:])
else:
rt.extend(rs[nStart:nStart + nNum])
# 释放cursor
self._DelCursor(cur)
return rt # 更新
def Exec(self, sql):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
# 判断sql是否允许其执行
if not self._PermitedUpdateSql(sql):
return rt
# 执行语句
print(sql)
try:
rt = cur.execute(sql)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 更新list
def Execlist(self, sqls):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
try:
for i in sqls:
# 判断sql是否允许其执行
if len(i.strip()) < 1:
continue
if not self._PermitedUpdateSql(i):
self._rollback()
return rt
# 执行语句
print(i)
rt = cur.execute(i)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 导出结果为文件
def Export(self, sql, file_name, colfg='||'):
rt = self. Query(sql)
if rt:
with open(file_name, 'a') as fd:
for row in rt:
ln_info = ''
for col in row:
ln_info += str(col) + colfg
ln_info += '\n'
fd .write(ln_info)

SqlServer版使用方法:

# 查询单个sql
mss = DBMSS(host, port, db, user, password)
sql = "select c1,c2,c3 from table1"
mss.Query(sql ) # 更新单个sql
sql = "update table1 set c1=0"
mss.Exec(sql ) # 更新多条sql
sqllist = []
sqllist.append("update table1 set c1=0")
sqllist.append("update table1 set c2=0")
mss.Execlist(sqllist)

三、PostgreSQL访问类

import psycopg2

class DBPg:
# PG 连接工具
def __init__(self, host, port, db, user, password):
self.host = host
self.port = port
self.db = db
self.user = user
self.password = password
self._conn = None
self._conn = self.__GetConnect() def try_except(self):
def wrapper(*args, **kwargs):
try:
self(*args, **kwargs)
except Exception as e:
print("get error: %s" % e)
return wrapper # @try_except
def __GetConnect(self):
if not self._conn:
return psycopg2.connect(database=self.db, user=self.user, password=self.password, host=self.host, port=self.port)
else:
pass def __del__(self):
if self._conn:
self._conn.close()
self._conn = None def _NewCursor(self):
cur = self._conn.cursor()
if cur:
return cur
else:
print("#Error# Get New Cursor Failed.")
return None def _DelCursor(self, cur):
if cur:
cur.close() # 检查是否允许执行的sql语句
def _PermitedUpdateSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2):
if 'WHERE' not in sql_elems2:
rt = False
return rt def _commit(self):
self._conn.commit() def _rollback(self):
self._conn.rollback() # 检查是否允许执行的sql语句
def CheckSelectSql(self, sql):
rt = True
lrsql = sql
sql_elems = lrsql.strip().split()
sql_elems2 = [x.upper() for x in sql_elems]
# update和delete最少有四个单词项
if len(sql_elems2) < 4:
rt = False
# 更新删除语句,判断首单词,不带where语句的sql不予执行
elif ('UPDATE' in sql_elems2 or 'DELETE' in sql_elems2 or 'INSERT' in sql_elems2):
rt = False
return rt # 查询
def Query(self, sql, nStart=0, nNum=- 1):
rt = []
# 获取cursor
cur = self._NewCursor()
if not cur:
return rt
# 查询到列表
print(sql)
cur.execute(sql)
if (nStart == 0) and (nNum == 1):
rt.append(cur.fetchone())
else:
rs = cur. fetchall()
if nNum == - 1:
rt.extend(rs[nStart:])
else:
rt.extend(rs[nStart:nStart + nNum])
# 释放cursor
self._DelCursor(cur)
return rt # 更新
def Exec(self, sql):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
# 判断sql是否允许其执行
if not self._PermitedUpdateSql(sql):
return rt
# 执行语句
print(sql)
try:
rt = cur.execute(sql)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 更新list
def Execlist(self, sqls):
# 获取cursor
rt = None
cur = self._NewCursor()
if not cur:
return rt
try:
for i in sqls:
# 判断sql是否允许其执行
if len(i.strip()) < 1:
continue
if not self._PermitedUpdateSql(i):
self._rollback()
return rt
# 执行语句
print(i)
rt = cur.execute(i)
self._commit()
# 释放cursor
self._DelCursor(cur)
# return rt
return "success"
except Exception as e:
print(e)
self._conn.rollback()
return str(e) # 导出结果为文件
def Export(self, sql, file_name, colfg='||'):
rt = self. Query(sql)
if rt:
with open(file_name, 'a') as fd:
for row in rt:
ln_info = ''
for col in row:
ln_info += str(col) + colfg
ln_info += '\n'
fd .write(ln_info)

PG版本使用方法:

# 查询单个sql
pg = DBPg(host, port, db, user, password)
sql = "select c1,c2,c3 from table1"
pg.Query(sql ) # 更新单个sql
sql = "update table1 set c1=0"
pg.Exec(sql ) # 更新多条sql
sqllist = []
sqllist.append("update table1 set c1=0")
sqllist.append("update table1 set c2=0")
pg.Execlist(sqllist)

其他版本如Mysql,原理类似,欢迎热心的同学补充

Python操作数据库类 Oracle、Sqlserver、PostgreSQL的更多相关文章

  1. python操作数据库PostgreSQL

    1.简述 python可以操作多种数据库,诸如SQLite.MySql.PostgreSQL等,这里不对所有的数据库操作方法进行赘述,只针对目前项目中用到的PostgreSQL做一下简单介绍,主要包括 ...

  2. 零基础学Python--------第11章 使用Python操作数据库

    第11章 使用Python操作数据库 11.1 数据库编程接口 在项目开发中,数据库应用必不可少.虽然数据库的种类有很多,如SQLite.MySQL.Oracle等,但是它们的功能基本都是一样的,为了 ...

  3. Python接口测试实战3(上)- Python操作数据库

    如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...

  4. Python学习笔记 - day11 - Python操作数据库

    MySQL的事务 MySQL的事务支持不是绑定在MySQL服务器本身,而是与存储引擎相关,MySQL的两种引擎如下: 1.MyISAM:不支持事务,用于只读程序提高性能 2.InnoDB:支持ACID ...

  5. 孤荷凌寒自学python第四十四天Python操作 数据库之准备工作

     孤荷凌寒自学python第四十四天Python操作数据库之准备工作 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天非常激动地开始接触Python的数据库操作的学习了,数据库是系统化设计 ...

  6. Python操作数据库及hashlib模块

    一.hashlib模块 hashlib模块,主要用于加密相关的操作,在python3的版本里,代替了md5和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA51 ...

  7. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

  8. python操作数据库之批量导入

    python操作数据库之批量导入 Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的 ...

  9. Python操作数据库之 MySQL

    Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...

随机推荐

  1. TypeError: put() missing 1 required positional argument: 'item'问题分析

    今天博主在练习带参数线程池的时候与到了如下问题: 翻译过来,就是缺少位置参数. 一.错误1 如果此时你的代码高亮是这样: 解决办法:在init魔法方法下的Queue没有加括号,即 self.q = Q ...

  2. Golang 基础之基础语法梳理 (三)

    大家好,今天将梳理出的 Go语言基础语法内容,分享给大家. 请多多指教,谢谢. 本次<Go语言基础语法内容>共分为三个章节,本文为第三章节 Golang 基础之基础语法梳理 (一) Gol ...

  3. unicode和unicode编码

    unicode编码是什么? 这其实是两个问题,unicode 是什么什么?unicode是怎样编码的? What is Unicode? Unicode provides a unique numbe ...

  4. 开源版-阿里云人脸搜索M:N,人脸比对1:1

    一.人脸搜索概要 本项目是阿里云视觉智能开放平台的人脸1:N的开源替代,项目中使用的模型均为开源模型,项目支持milvus和proxima向量存储库,并具有较高的自定义能力. 项目使用纯Java开发, ...

  5. shellLab实验报告

    一.预备知识 阅读课本CSAPP的第八章后完成本次实验,要求熟练掌握以下内容: 进程的概念.状态以及控制进程的几个函数(fork,waitpid,execve). 信号的概念,会编写正确安全的信号处理 ...

  6. Cobalt Strike的安装

    一.下载 压缩包下载回来之后,可以看到里面的文件有这些: 其中搭建团队服务器端的关键文件有两个,一个是cobaltstrike.jar,另一个是teamserver,这里我打算将团队服务器端搭在我的v ...

  7. 三分钟掌控Actor模型和CSP模型

    回顾一下前文<三分钟掌握共享内存模型和 Actor模型> Actor vs CSP模型 传统多线程的的共享内存(ShareMemory)模型使用lock,condition等同步原语来强行 ...

  8. Mybatis mapper文件占位符设置默认值

    如果要设置占位符默认值的话:需要进行 设置 org.apache.ibatis.parsing.PropertyParser.enable-default-value 属性为true启用占位符默认值处 ...

  9. vue中的全局组件和局部组件的应用

    1全局组件 vue框架: https://www.vue-js.com/?tab=all 组件树 solt 内置分发组件 应用见局部组件 2局部组件 2.1局部组件的使用:生子 - 挂子 - 用子 & ...

  10. 学习saltstack (一)

    salt介绍 Salt是一个基础平台管理工具 Salt是一个配置管理系统,能够维护预定义状态的远程节点 Salt是一个分布式远程执行系统,用来在远程节点上执行命令和查询数据 salt的核心功能 是命令 ...