# Filename:mysql_class.py
# Author:Rain.Zen; Date: 2014-04-15 import MySQLdb class MyDb: '''初始化[类似于构造函数]'''
def __init__(self, host, user, password, charset = 'utf8'):
self.host = host
self.user = user
self.password = password
self.charset = charset
try:
self.conn = MySQLdb.connect(host = self.host, user = self.user, passwd = self.password, charset = self.charset)
self.cur = self.conn.cursor()
except MySQLdb.Error as e:
print('MySQL Error %d: %s' % (e.args[0], e.args[1])) '''组合字符串'''
def joinData(self, data, char = ','):
return char.join(data) '''解析条件语句,参数类型[{dict}, 'AND|OR'] | {dict}'''
def parseMap(self, condition) :
if isinstance(condition, list) :
dictMap = condition[0]
logic = ' '+ condition[1] +' '
else :
dictMap = condition
logic = ' AND ' if isinstance(dictMap, dict) :
for k, v in dictMap.items():
dictMap[k] = "`"+ k +"` = '"+ str(v) +"'"
return self.joinData(dictMap.values(), logic)
else :
return '1 = 1' '''选择数据表'''
def selectDb(self, db):
try :
self.conn.select_db(db)
except MySQLdb.Error as e:
print('MySQL Error %d: %s' % (e.args[0], e.args[1])) '''执行SQL语句'''
def query(self, sql):
try :
return self.cur.execute(sql)
except MySQLdb.Error as e:
print 'MySQL Error: %s \nSQL: %s' % (e, sql) '''添加一条信息'''
def addOne(self, table, dictData):
for field, value in dictData.items():
dictData[field] = "'"+ str(value) +"'"
self.query('INSERT INTO ' + table + "("+ self.joinData(dictData.keys()) +') VALUES('+ self.joinData(dictData.values()) +')')
return self.cur.lastrowid '''修改一条信息[根据条件]'''
def saveOne(self, table, dictData, condition):
for key, val in dictData.items():
dictData[key] = "`"+ key +"` = '"+ str(val) +"'"
save_sql = 'UPDATE ' + table + ' SET ' + self.joinData(dictData.values()) + ' WHERE ' + self.parseMap(condition)
return self.query(save_sql) '''删除信息[根据条件]'''
def deleteOne(self, table, condition):
return self.query('DELETE FROM ' + table + ' WHERE ' + self.parseMap(condition)) '''读取单条信息[根据条件]'''
def fetchOne(self, tabel, condition, fields = '*', dataType = 0):
field = isinstance(fields, list) and self.joinData(fields) or fields
self.query('SELECT '+ field +' FROM ' + tabel + ' WHERE ' + self.parseMap(condition))
tupleData = self.cur.fetchone()
if dataType == 0 or fields == '*' :
return tupleData
else :
dictData = {}
n = 0
for k in fields:
dictData[k] = tupleData[n]
n = n + 1
return dictData '''读取多条信息[根据条件]'''
def fetchSome(self, tabel, condition, fields = '*', dataType = 0):
field = isinstance(fields, list) and self.joinData(fields) or fields
self.query('SELECT '+ field +' FROM ' + tabel + ' WHERE ' + self.parseMap(condition))
tupleData = self.cur.fetchall()
count = self.cur.rowcount
if count > 0:
if dataType == 0 or fields == '*' :
return (int(count), tupleData)
else :
listData = []
for row in tupleData:
dictData = {}
n = 0
for k in fields:
dictData[k] = row[n]
n = n + 1
listData.append(dictData)
return (int(count), listData)
else:
return False '''获取信息总数[根据条件]'''
def getCount(self, tabel, condition = 0):
where = isinstance(condition, dict) and ' WHERE ' + self.parseMap(condition) or ''
self.query('SELECT 0 FROM ' + tabel + where)
return self.cur.rowcount '''提交事务'''
def commit(self):
self.conn.commit() '''关闭句柄和连接'''
def close(self):
self.cur.close()
self.conn.close()

DEMO

 # Filename: test_mysql.py

 from mysql_class import MyDb

 '''测试开始'''

 '''连接数据库[实例化]'''
my_db = MyDb('127.0.0.1', 'python_user', '') '''选择数据库'''
my_db.selectDb('test') '''修改单条信息
dictData = {'class' : 'DD', 'name' : 'Pitt.C', 'subject' : 'Match_01', 'score' : 60}
condition = [{'class' : 'DD', 'name' : 'Tom'}, 'OR']
print my_db.saveOne('cla_info', dictData, condition)''' '''删除信息
condition = [{'class':'DD', 'name':'bd', 'id':17}, 'OR']
print my_db.deleteOne('cla_info', condition)''' '''获取单条信息
fields = ['class', 'name', 'subject', 'score', 'comment']
condition = {'id':6}
print my_db.fetchOne('cla_info', condition, fields)''' '''新增[单条]
dictData = {'class' : 'DDD', 'name' : 'Pitt', 'subject' : 'Match', 'score' : 97}
in_id = my_db.addOne('cla_info', dictData)
print 'Successful add data: ID(%d)' % in_id''' '''查询数据
field = ['class', 'name', 'subject', 'score', 'comment']
condition = {'name':'小明'}
ary = my_db.fetchSome('cla_info', condition, field, 1)
if ary or False :
print 'The total is:',ary[0]
print ary[1]''' '''获取总数
condition = {'name':'小明'}
print my_db.getCount('cla_info')''' '''事务处理'''
my_db.commit() '''关闭句柄和连接'''
my_db.close()

Python封装的访问MySQL数据库的类及DEMO的更多相关文章

  1. 【python小记】访问mysql数据库

    题记: 最近因为工作需要,学习了python,瞬间对这个轻松快捷的语给吸引了,以前只知道js脚本是写网页的,没有想到python这个脚本语言的应用范围可以这么广泛,现在做一些简单或稍微复杂的操作,基本 ...

  2. C#访问MySQL数据库帮助类

    MySQL数据库访问帮助类 1.项目添加引用官方MySQL动态库MySql.Data.dll 下载地址:MySql.Data.dll(也可以到官网下载动态库)项目添加引用 这里有一个Mysql帮助类的 ...

  3. Python访问MySQL数据库并实现其增删改查功能

    概述:对于访问MySQL数据库的操作,我想大家也都有一些了解.不过,因为最近在学习Python,以下就用Python来实现它.其中包括创建数据库和数据表.插入记录.删除记录.修改记录数据.查询数据.删 ...

  4. 在Eclipse中使用JDBC访问MySQL数据库的配置方法

    在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...

  5. 封装好的MySQL.class.php类

    封装好的MySQL.class.php类 作用:数据库操作类 <?php header('content-type:text/html;charset=utf-8'); class MySQLD ...

  6. PHP访问MySql数据库介绍

    在网站后台,经常要与数据库打交道.本文介绍如何使用XAMPP来管理MySql数据库及如何用PHP来访问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...

  7. C#连接、访问MySQL数据库

    一.准备工具 visual stuido(本示例使用visual studio 2010) MySql.Data.dll mysql_installer_community_V5.6.21.1_set ...

  8. C#访问MySQL数据库(winform+EF)

    原文:C#访问MySQL数据库(winform+EF) 以前都是C#连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winf ...

  9. Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...

随机推荐

  1. C#整理1——进制转换

    进制转换:二进制,八进制,十进制,十六进制. (一)二进制转十进制: 1.写2 2.标指数,从右向左,从0开始依次标记 3.乘系数,一一对应. 4.相加. 例:二进制数1101转十进制数* 1.2   ...

  2. RSA不对称加密,公钥加密私钥解密,私钥加密公钥解密

    RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一 ...

  3. zepto.js 处理Touch事件(实例)

    处理Touch事件能让你了解到用户的每一根手指的位置,在touch事件触发的时候产生,可以通过touch event handler的event对象取到,如果基于zepto.js开发,一般是通过eve ...

  4. Mschart应用之曲线图表spline

    本文主要是Mschart应用之曲线图表spline,实现6个模拟数据的图表,其中数据源X轴为当前系统时间,Y轴是由随机函数产生的不同范围的随机数. 首先是自定义一个数据表,然后产生的数据添加到该数据表 ...

  5. SQL Server数据恢复——日志备份

    太坑了,我把数据给删了 “大坑啊,数据被我误删了.”从事数据库相关工作的过程中,我想应该很多人会有过和我一样的遭遇吧?尤其是在进行update或者delete操作的时候,忘记了where条件.这些毁灭 ...

  6. ios9配置info.plist中关于安全访问问题

    打开info.plist文件 - >添加App Transport Security Settings 字典类型,在App Transport Security Settings下增加Allow ...

  7. C#1 输入输出 常量变量

    C#  输入输出  常量变量 //输出 Console.WriteLine("这是一行文字"); 自动回车的. Console.Write("Hello world&qu ...

  8. ckplayer 网页视频播放

    最近做文件上传,可以上传的资源有图片,也有视频,在显示列表中点击视频播放图片(图1),需要弹出播放窗口(图2),播放视频.具体效果画面如下: 图1 图2:播放窗口 实现该功能使用的是ckplayer播 ...

  9. 自学HTML5第一天(认识HTML5的全局属性)

    contextmenu 属性 规定 <div> 元素的上下文菜单.上下文菜单会在用户右键点击元素时出现.列子: <div contextmenu="mymenu" ...

  10. 转:一个跨WINDOWS LINUX平台的线程类

     来源:http://blog.csdn.net/dengxu11/article/details/7232681 继Windows下实现一个CThread封装类之后,这里我再实现一个跨WINDOWS ...