自定义 Mysql 类 与 自定义 异常类
import MySQLdb
class MyExcept(Exception): ''' 常见做法定义异常基类,然后在派生不同类型的异常 '''
def __init__(self, *args): self.args = args
class DropDataaseError(MyExcept): def __init__(self): self.args = ('删除数据库错误!',) self.message = '删除数据库错误!' self.code = 100
class DropTableError(MyExcept): def __init__(self): self.args = ('删除表错误!',) self.message = '删除表错误!' self.code = 200
class CreateDatabaseError(MyExcept): def __init__(self): self.args = ('不能创建数据库',) self.message = '不能创建数据库' self.code = 300
class OperatorError(MyExcept): ''' 操作错误,一般是要做的事情和实际功能不匹配 '''
def __init__(self, message): self.args = (message,) self.message = message self.code = 400
class FileIsExistsError(MyExcept): def __init__(self, message): self.args = (message,) self.message = message self.code = 500
##raise OperatorError('错误消息') # 这里突然返现 raise引发的异常将中断程序import jsonimport os
class Mysql: conn = None host = None port = None user = None passwd = None charset = None mysql_name = None cursor = None
@classmethod def create_database(cls, sql): if 'create database' not in sql: raise OperatorError('这是创建数据库') cls.query(sql) cls.use_database()
@classmethod def use_database(cls): if cls.mysql_name != None: cls.query('use %s ;' % cls.mysql_name) else: raise OperatorError('切换数据库失败')
@classmethod def config(cls, mode=False, host='localhost', port=3306, mysql_name='test', user='root', passwd='', charset='utf8', path='config.json'): ''' 连接数据库配置文件 :param mode: mode false 默认为自动传值,true 为从json配置文件里面获取数据 :param host:ip 默认为空localhost :param port: 端口 默认为3306 :param mysql_name: 数据库名称 必须指定 :param user: 用户名称,默认值为root :param passwd: 默认密码为空 :param charset: 默认字符编码为utf8 :param cursorclass:Faslse 不指定MySQLdb.cursors.DictCursor,True指定为MySQLdb.cursors.DictCursor :return: NUll '''
if not mode:
if {'', ' ', ' ', None} & {host, port, user, charset, mysql_name}: raise OperatorError( "host,port,user,charset可以不传值,但是不能传空值!,也不可为空格")
Mysql.host = host Mysql.port = port Mysql.user = user Mysql.passwd = passwd Mysql.charset = charset Mysql.mysql_name = mysql_name
if mode: if not os.path.exists(path): raise FileIsExistsError('文件不存在')
with open(path, 'rt', encoding='utf8') as f: config_json_dic = json.load(f)
Mysql.host = config_json_dic['host'] Mysql.port = config_json_dic['port'] Mysql.user = config_json_dic['user'] Mysql.passwd = config_json_dic['passwd'] Mysql.charset = config_json_dic['charset']
try: Mysql.conn = MySQLdb.connect(host=Mysql.host, port=Mysql.port, user=Mysql.user, passwd=Mysql.passwd, db=Mysql.mysql_name, charset=Mysql.charset) except Exception as e: Mysql.conn.close() print(e) else: Mysql.get_cursor() # cls.use_database()
@classmethod def get_cursor(cls, mode=False): # -------------------------- ''' 获取操作的游标 :return: Null ''' if not mode: Mysql.cursor = Mysql.conn.cursor() else: Mysql.cursor = Mysql.conn.cursor( cursorclass=MySQLdb.cursors.DictCursor)
@classmethod def having_sql(cls, sql): ''' sql 过滤 :param sql:需要过滤的sql :return:过滤后的sql ''' # 没有写好 return True
@classmethod def query(cls, sql): ''' 底层 sql 执行语句 :param sql: sql语句 :return: ''' # if 'drop table' in sql: # raise ValueError('不允许删除表!') # # if 'drop database' in sql: # raise ValueError('不允许删除数据库')
if {'', ' ', ' ', None} & {Mysql.host, Mysql.port, Mysql.user, Mysql.charset, Mysql.mysql_name}: raise ValueError("host,port,user,charset可以不传值,但是不能传空值!")
if not cls.having_sql(sql): raise ValueError('含有非法字符')
try: Mysql.cursor.execute(sql) Mysql.conn.commit() # 提交 except: Mysql.conn.rollback() # 回滚操作 return False else: return True
@classmethod def update(cls, sql): if not ('update' in sql): raise OperatorError('更新表记录!')
return Mysql.query(sql)
@classmethod def truncate(cls, sql): if not ('truncate' in sql): raise OperatorError('清空表记录操作')
return Mysql.query(sql)
@classmethod def delete(cls, sql): if not ('delete' in sql): raise OperatorError('删除表记录!')
return Mysql.query(sql)
@classmethod def create(cls, sql): if not ('create table' in sql): raise OperatorError('创建表!')
if 'create database' in sql: raise CreateDatabaseError()
return Mysql.query(sql)
@classmethod def insert(cls, sql): if not ('insert into' in sql): raise OperatorError('插入记录!')
return Mysql.query(sql)
@classmethod def insert_many(cls, sql, res): ''' 批量插入 :param sql:sql sample:insert into talbe_name values(0,%s,%s,%s,%s,%s) :param res:res sample:((title,singer,imgurl,url,alpha),(title2,singer2,imgurl2,url2,alpha2)) :return line: why? ''' if not ('insert into' in sql): raise OperatorError('操作错误,这是插入') if not len(res) or len(res) < 5: raise ValueError('插入的值不能为空')
line = Mysql.cursor.executemany(sql, res) return line
@classmethod def get_line(cls, sql): ''' 获取单行的数据 :return: ''' if not ('select' in sql): raise OperatorError('执行查询')
cls.query(sql)
try: return True, Mysql.cursor.fetchone(); except: return False, '没有数据'
@classmethod def get_lines(cls, sql): ''' 返回多行数据 :return: ''' if not ('select' in sql): raise OperatorError('执行查询')
cls.query(sql)
try: return True, Mysql.cursor.fetchall(); except Exception as e: print(e) return False, '没有数据'
@classmethod def get_fetchmany(cls, sql, size=1): ''' 获取指定数量数据 :param size: 接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数 :return:tuple ''' if not isinstance(size, int): raise TypeError('类型错误')
if size <= 0: return None;
if not ('select' in sql): raise OperatorError('执行查询')
cls.query(sql)
return Mysql.cursor.fechmany(size)
@classmethod def close(cls): ''' 关闭cursor 和db 连接 :return: ''' Mysql.cursor.close() Mysql.conn.close()
# # @classmethod # def __del__(): # Mysql.close()
自定义 Mysql 类 与 自定义 异常类的更多相关文章
- 【转】【C#】异常类 Exception 枚举所有类型的异常
一.基础 在C# 里,异常处理就是C# 为处理错误情况提供的一种机制.它为每种错误情况提供了定制的处理方式,并且把标识错误的代码与处理错误的代码分离开来. 对.NET类来说,一般的 异常类System ...
- Java学习(异常类)
一.什么是异常: 异常就是在运行时产生的问题.通常用Exception描述. 在java中,把异常封装成了一个类,当出现问题时,就会创建异常类对象并抛出异常相关的信息(如详细信息,名称以及异常所处的位 ...
- Java异常类及处理
异常概述:运行时发生的不正常情况 在java中用类的形式对不正常的情况进行了描述和封装对象. 描述不正常的类,称之为异常类. 异常就是java通过面向对象的思想将问题封装成了对象,用异常类对其进行描述 ...
- C#异常类相关总结
C#异常类相关总结 C#异常类相关总结 C#异常类一.基类ExceptionC#异常类二.常见的异常类1.SystemException类:该类是System命名空间中所有其他异常类的基类.(建议:公 ...
- C#异常类总结
http://msdn.microsoft.com/zh-cn/library/aa664610(v=vs.71).aspx C#异常类相关总结 C#异常类一.基类Exception C#异常类二.常 ...
- java内部类和异常类的概念
1.内部类的外嵌类的成员变量在内部类中任然有效,内部类中的方法也可以调用外嵌类中的 方法,内部类中不可以声明类的变量和方法,外嵌的类体可以用内部类声明对象,作为外嵌类的成员.内部类仅供他的外嵌类使用. ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- 自定义Springboot全局异常类
一.简要说明 如何实现网上文章基本是随便一搜就可以很快找到, 这里不再赘述. 二.Spring-web和Spring-webmvc 通过idea查看到两个注解位于 spring-web-5.2.2.R ...
- java中自定义一个异常类 在某些情况抛出自定的异常 ----------阻断程序
//=============定义异常类 package org.springblade.flow.engine.errorException; /** * 自定义异常处理写入sap失败 */ pub ...
- PHP (Yii2) 自定义业务异常类(可支持返回任意自己想要的类型数据)
public function beforeAction($action) { return parent::beforeAction($action); } public function runA ...
随机推荐
- C#自制Web 服务器开发:用C#开发自己的Web服务器
当输入: GET / HTTP/1.1 Accept: text/html, application/xhtml+xml, */* Accept-Language: zh-CN User-Agent: ...
- Microsoft® SQL Server® 2012 功能包
Microsoft® SQL Server® 2012 功能包 http://www.microsoft.com/zh-cn/download/details.aspx?id=29065 Micros ...
- C#中属性和字段的区别
属性和字段的区别 在C#中,我们可以非常自由的.毫无限制的访问公有字段,但在一些场合中,我们可能希望限制只能给字段赋于某个范围的值.或是要求字段只能读或只能写,或是在改变字段时能改变对象的其他一些状态 ...
- BN和滑动平均
BN目的是使得每层训练的输出结果在同一分布下,实验证明不仅可以加速收敛速度,还可以提高准确度 因为如果想要计算所有图像的均值与方差,显然不太现实,所以每次计算每个batch的方差与均值,为了使得每个b ...
- Qt的action控件中采用默认绑定,没有connect显示绑定!!!
使用qt创建界面时,可以选用代码设计也可以选用qt design来设计.最近看我同事的代码,以前写action都是使用connect链接槽函数的, 网上大多数人都是这样,然后我就纳闷,怎么没有conn ...
- AngularJS 中{{}}与ng-bind指令
面试中,有被问题关于{{}}与ng-bind指令的问题,在此,分享下自己的知识点. 在脚本没有加载完成时,用户会看到{{}},界面比较丑陋. 一般的解决方法: 在index.html里面使用n ...
- ie兼容,手机端兼容问题
兼容性: 1.ie6,7不能兼容border-radius:若需要可以用图片的方式进行模拟. 2.ie6, 7中如果兄弟元素没有给左浮动,而本身给了右浮动,将会出现塌陷(也就是掉下去):如需要可以将右 ...
- html -引入其他html页面
其他页面html为:ip.html 主页面代码 <body> <div id="ip"></div> </body> <scr ...
- quast-lg
1.官网简介 http://cab.spbu.ru/software/quast-lg/ QUAST- lg是QUAST的一个扩展,用于评估大型基因组装配(直至哺乳动物大小).QUAST- lg从5. ...
- aspectj ----- 简介
一.为什么写这个系列的博客 Aspectj一个易用的.功能强大的aop编程语言.其官网地址是:http://www.eclipse.org/aspectj/,目前最新版本为:1.7.0 RC1.但 ...