#-*-coding:utf-8-*-
import pymysql.cursors
from pymysql.err import *
import Log
from common.setting import *
log = Log.getLogger()
'''
MySQL工具类
'''
class MySqlUtil:
@staticmethod
def connect(dbInfo):
# Connect to the database
if not dbInfo in DBinfo.keys():
log.error("数据库不存在: "+dbInfo)
raise DatabaseError
conn = pymysql.connect(
host=DBinfo[dbInfo]['数据库hosts'],
port=int(DBinfo[dbInfo]['数据库端口']),
user=DBinfo[dbInfo]['用户名'],
passwd=DBinfo[dbInfo]['用户密码'],
db=DBinfo[dbInfo]['数据库名称'],
charset='utf8'
)
log.debug("连接数据库成功,databse="+dbInfo)
return conn
@staticmethod
def selectOne (dbInfo,sql)->tuple:
conn=MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}"+sql)
cursor.execute(sql)
dbResult = cursor.fetchone()
except MySQLError as e:
log.error(str(e))
except Exception as e:
log.error(str(e))
finally:
cursor.close()
conn.close()
return dbResult
@staticmethod
def selectAll(dbInfo, sql)->tuple:
conn = MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}" + sql)
cursor.execute(sql)
dbResult = cursor.fetchall()
except MySQLError as e:
log.error(str(e))
except Exception as e:
log.error(str(e))
finally:
cursor.close()
conn.close()
return dbResult
@staticmethod
def update(dbInfo, sql):
conn = MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}" + sql)
cursor.execute(sql)
conn.commit()
except MySQLError as e:
log.error(str(e))
conn.rollback()
except Exception as e:
log.error(str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
@staticmethod
def delete(dbInfo, sql):
conn = MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}" + sql)
cursor.execute(sql)
conn.commit()
except MySQLError as e:
log.error(str(e))
conn.rollback()
except Exception as e:
log.error(str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
@staticmethod
def insert(dbInfo, sql):
conn = MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}" + sql)
cursor.execute(sql)
conn.commit()
except MySQLError as e:
log.error(str(e))
conn.rollback()
except Exception as e:
log.error(str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
##批量添加数据,!!!!!数据格式必须list[tuple(),tuple(),tuple()] 或者tuple(tuple(),tuple(),tuple())
@staticmethod
def insertBatch(dbInfo, sql,tupleList):
conn = MySqlUtil.connect(dbInfo)
try:
cursor = conn.cursor()
log.debug("开始执行sql={}" + sql)
cursor.executemany(sql,tupleList)
conn.commit()
except MySQLError as e:
log.error(str(e))
conn.rollback()
except Exception as e:
log.error(str(e))
conn.rollback()
finally:
cursor.close()
conn.close()
'''
ON DUPLICATE KEY UPDATE
存在重复键值时,覆盖
sql = "INSERT INTO auto_relation (model_name, content,type)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE content=VALUES (content)"
'''