import pymysql
import traceback
class MysqlHelps:
def __init__(self, host, db):
self.connect = None
self.mouse = None
self.connect = pymysql.Connect(host=host, user="root", password="123456", db=db, port=3306, )
self.mouse = self.connect.cursor()
self.params = []
self.insert_len = 100
def execute(self, query, args=None):
"""
执行单行sql语句;语句出错后鼠标回滚
:param query: sql语句
:param args: 用于给sql语句(%s)占位符传参
:return:
"""
try:
self.mouse.execute(query, args)
self.connect.commit()
# TODO 接收数据重复异常
except pymysql.err.IntegrityError:
print("数据重复!")
# TODO 接收sql语句表名异常
except pymysql.err.ProgrammingError as e:
print(traceback.format_exc())
print("sql语句异常!", e)
# TODO 接收数据其他异常异常
except Exception as e:
print(e)
self.connect.rollback()
def executemany(self, sql, params):
"""
执行单行sql语句;语句出错后鼠标回滚
:param sql: sql语句
:param params: 用于给sql语句(%s)占位符传参
:return:
"""
try:
self.mouse.executemany(sql, params)
self.connect.commit()
# TODO 接收数据重复异常
except pymysql.err.IntegrityError:
print("数据重复!")
# TODO 接收sql语句表名异常
except pymysql.err.ProgrammingError as e:
print("sql语句异常!", e)
# TODO 接收数据其他异常异常
except Exception as e:
print(e)
self.connect.rollback()
def insert_one(self, table, database_field: tuple, insert_filed: tuple):
"""
插入单条数据
:param table: 所需插入表格
:param database_field: 所需插入表格字段
:param insert_filed: 插入字段
:return:
"""
self.execute(f"insert into {table}{database_field} values{insert_filed} ")
def insert_many(self, table, database_field: tuple, insert_filed: tuple):
"""
插入多条数据,sql语句存入列表,列表长度为100时执行
:param table: 所需插入表名
:param database_field: 所需插入表字段
:param insert_filed: 插入字段
:return:
"""
self.params.append(insert_filed)
# TODO 自动获取字段数量,添加占位符
s_count = (len(insert_filed) - 1) * "%s,"
sql = f"INSERT INTO {table}{database_field} VALUES ({s_count}%s)"
if len(self.params) == self.insert_len:
self.executemany(sql, self.params)
self.params = []
def fetchone(self):
return self.mouse.fetchone()
def fetchall(self):
for i in self.mouse.fetchall():
print(i)
'''写出执行到最后self.params中可能还有数据未插入数据库,如何处理'''
def __del__(self):
"""
断开连接释放游标
:return:
"""
if self.connect:
self.connect.close()
self.connect = None
if self.mouse:
self.mouse.close()
self.mouse = None