Python封装的访问MySQL数据库的类及DEMO
# 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的更多相关文章
- 【python小记】访问mysql数据库
题记: 最近因为工作需要,学习了python,瞬间对这个轻松快捷的语给吸引了,以前只知道js脚本是写网页的,没有想到python这个脚本语言的应用范围可以这么广泛,现在做一些简单或稍微复杂的操作,基本 ...
- C#访问MySQL数据库帮助类
MySQL数据库访问帮助类 1.项目添加引用官方MySQL动态库MySql.Data.dll 下载地址:MySql.Data.dll(也可以到官网下载动态库)项目添加引用 这里有一个Mysql帮助类的 ...
- Python访问MySQL数据库并实现其增删改查功能
概述:对于访问MySQL数据库的操作,我想大家也都有一些了解.不过,因为最近在学习Python,以下就用Python来实现它.其中包括创建数据库和数据表.插入记录.删除记录.修改记录数据.查询数据.删 ...
- 在Eclipse中使用JDBC访问MySQL数据库的配置方法
在Eclipse中使用JDBC访问MySQL数据库的配置方法 分类: DATABASE 数据结构与算法2009-10-10 16:37 5313人阅读 评论(10) 收藏 举报 jdbcmysql数据 ...
- 封装好的MySQL.class.php类
封装好的MySQL.class.php类 作用:数据库操作类 <?php header('content-type:text/html;charset=utf-8'); class MySQLD ...
- PHP访问MySql数据库介绍
在网站后台,经常要与数据库打交道.本文介绍如何使用XAMPP来管理MySql数据库及如何用PHP来访问MySql数据库. 一.使用XAMPP来管理MySql数据库 首先使用XAMPP打开MySql的管 ...
- C#连接、访问MySQL数据库
一.准备工具 visual stuido(本示例使用visual studio 2010) MySql.Data.dll mysql_installer_community_V5.6.21.1_set ...
- C#访问MySQL数据库(winform+EF)
原文:C#访问MySQL数据库(winform+EF) 以前都是C#连接SQLServer,现在MySQL也比较火了,而且是开源跨平台的,这里连接使用一下,主要是体会一下整个流程,这里使用的是winf ...
- Spring Boot入门(六):使用MyBatis访问MySql数据库(注解方式)
本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 本篇博客我们讲解下在Spring Boot中使用MyBatis访问MySql数据库的简单用法. 1.前期 ...
随机推荐
- DevExpress GridControl一些属性使用方法总结
一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...
- foreach 和for语句比较
1.首先想到循环就是执行效率的问题,参考博客http://www.cnblogs.com/yzxchoice/archive/2007/12/15/995949.html 2. 测试时候发现出现“ ...
- 通过设置cookie实现单点登录
最近要做个登录一个客户端跳转到另一个网站不用再登录,有两种方法,第一种就是写接口通过客户端传值账号直接到目标网站,另一种是写入cookie到目标网站.由于目标网站之前就是通过cookie实现单点登录, ...
- web.config详解
在开发中经常会遇到这样的情况,在部署程序时为了保密起见并不将源代码随项目一同发布,而我们开发时的环境与部署环境可能不一致(比如数据库不一样),如果在代码中保存这些配置这些信息部署时需要到用户那里更改代 ...
- oracle操作语句
Oracle中建立索引,会提高查询速度: create index 索引名 on 表名(列名); create index index_userid on tbl_detail(userid);如何找 ...
- eclipse 和myEclipse 项目导入
经常在eclipse/myeclipse中导入web项目时,出现转不了项目类型的问题,导入后就是一个java项目. 有两种情况: 一.eclipse无法识别其他eclipse的web项目 解决步骤: ...
- javascript 数据结构和算法读书笔记 > 第二章 数组
这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: jav ...
- Example: Develop Web application on Baidu App Engine using CherryPy
In the past few months, I have developed two simple applications on Baidu App Engine. Compared to Go ...
- LGA(land grid array)
产品应用 1.射频功放 2.加速度传感器 3.地磁传感器 可靠性 Reliability 高压蒸煮 PCT 121℃,100%RH,2atm,96hrs 高低温循环 TCT -55℃(15min)~1 ...
- Build A Micro Team
最近这两周一直在忙,忙到忘记回QQ和微信的程度,甚至有两天下班回来直接躺平,虽说忙碌但是也收获了不少. Start 说起来有趣,最近在忙的这个项目最初是公司设立的用于工程师在业余时间开发的projec ...