工作中使用python脚本,连接到各种数据库,批量执行sql可以提高执行效率,但通常,我们在类似DBeaver、navicat上面,执行语句后可以直观看到本次操作,受影响的数据有多少条,如下图,但在代码里,我们delete、insert后,无法直观看到执行sql是否成功,今天主要解决这个问题,让python返回受影响的行数,方便我们校验,sql语句是否真的执行成功~
我们可以通过游标获取受影响数据,可以看下update部分的返回值:return self.coon.affected_rows()
以下是mysql代码实例:
import pymysql
class HandleDB:
def __init__(self, host, port, user, passwd, database):
self.coon = pymysql.connect(
host=host,
port=port,
user=user,
passwd=passwd,
database=database,
charset='utf8',
cursorclass=pymysql.cursors.DictCursor
)
# 创建游标
self.cur = self.coon.cursor()
def select_one_data(self, sql):
self.coon.commit()
self.cur.execute(sql)
return self.cur.fetchone()
def select_all_data(self, sql):
self.coon.commit()
self.cur.execute(sql)
return self.cur.fetchall()
def update(self, sql):
"""
执行数据库的增/删/改操作
:param sql:
:return:
"""
self.cur.execute(sql)
self.coon.commit()
return self.coon.affected_rows()
def close(self):
self.cur.close()
self.coon.close()
oracle的方法和mysql不同,update部分的返回值:return self.cur.rowcount
,以下是oracle方法:
import cx_Oracle
class HandleDBora:
def __init__(self, host, port, user, passwd, service_name):
self.host = host
self.port = port
self.user = user
self.passwd = passwd
self.service_name = service_name
self.coon = cx_Oracle.connect('{}/{}@{}:{}/{}'.format(self.user, self.passwd, self.host, self.port,
self.service_name)) # 连接数据库字符串
self.cur = self.coon.cursor() # 创建游标
def select_one_data(self, sql):
self.coon.commit()
self.cur.execute(sql)
return self.cur.fetchone()
def update(self, sql):
"""
执行数据库的增/删/改操作
:param sql:
:return:
"""
self.cur.execute(sql)
self.coon.commit()
return self.cur.rowcount
def close(self):
self.cur.close()
self.coon.close()
以下是实际调用后的结果: