python操作mysql数据库,一次性执行多条语句不执行
总结:1、使用这种方法,获取到的返回值总是最后一条命令的返回值,如果最后一条命令是update或者delete这种sql,则返回为()
2、sql的每一条语句后面都需要添加一个分号,不然最后splice时候 ,会少一条语句
#-*- coding:utf-8 -*- """ @author:yaren_zhou @file: DButils.py @time: 2019/12/06 14:56 @contact: 1601704037@qq.com @software: PyCharm """ import pymysql import logging logger = logging.getLogger(__name__) #操作日志对象 class MysqlConn(): ''' 数据库连接的公共类,提供连接数据库,查询,删除语句等操作 ''' def __init__(self,dbName = None): self.currentConn = None self.host = "your host" self.user = "username" self.password = "password" self.dbName = dbName self.charset = "utf8mb4" self.resultlist = [] def open(self): try: conn = pymysql.connect( host = self.host, user = self.user, password = self.password, db = self.dbName, charset=self.charset, ) except pymysql.err.OperationalError as e: logger.exception("数据库连接失败!") if "Errno 10060" in str(e) or "2003" in str(e): logger.error("数据库连接失败!") raise logger.info(f"数据库连接成功") self.currentConn = conn # 数据库连接完成 self.cursor = self.currentConn.cursor() # 游标,用来执行数据库 # 把多条sql拆分成单条,放进sqllist里面 def spliteSql(self,sql): sqllist = sql.split(';') return sqllist[0:-1] #最后面会多一条空值 def execSql(self,sql:str,closeConn = True) -> list: '''执行sql,支持执行多条sql语句。''' self.open() sqllist = self.spliteSql(sql) #先处理传入的sql语句 logger.info(f"开始执行sql语句") with self.cursor as my_cursor: for i in sqllist: my_cursor.execute(i) #执行sql语句 self.resultlist = my_cursor.fetchall() #获取数据 self.currentConn.commit() #提交 if self.currentConn: self.close() return self.resultlist # def execProc(self): def close(self): #关闭连接 logger.info(f"关闭数据库连接") if self.cursor: self.cursor.close() self.currentConn.close()