python调用mysql数据库sql语句过长有问题吗_python操作mysql数据库,一次性执行多条语句不执行...

本文介绍了一种在Python中批量执行SQL语句的方法,并详细解释了如何处理返回值及SQL语句间的分隔问题。通过MysqlConn类实现了数据库连接、执行SQL及关闭连接等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总结: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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值