python db类用法说明


Posted in Python onJuly 07, 2020

我就废话不多说了,大家还是直接看代码吧~

import pymysql
 
class DB:
 __host = 'localhost' # 服务器地址
 __username = 'root' # 用户名
 __password = '' # 密码
 __database = 'test' # 数据库
 __field = '*' # 查询字段
 __where = '' # 条件
 __sql = False # 是否返回sql
 __join = '' # 联表
 __order = '' # 排序
 __limit = '' # 数量
 
 # 构造函数,在生成对象时调用
 def __init__(self, table):
  try:
   # 打开数据库连接 host, username, password, database
   self.db = pymysql.connect(self.__host, self.__username, self.__password, self.__database)
  except Exception as e:
   print(e)
   exit()
 
  # 使用 cursor() 方法创建一个游标对象 cursor
  self.cursor = self.db.cursor()
  self.table = table
 
 # 析构函数,释放对象时使用
 def __del__(self):
  try:
   # 关闭数据库连接
   self.db.close()
  except Exception as e:
   print(e)
 
 # 得到当前sql语句
 def getSql(self):
  self.__sql = True
  return self
 
 # 字段
 def field(self, str):
  self.__field = str
  return self
 
 # 联表
 def join(self, table, where):
  self.__join = ' LEFT JOIN ' + table + ' ON ' + where + ' '
  return self
 
 # 条件
 def where(self, param):
  self.__where = ' WHERE '
  if isinstance(param, list):
   for i in param:
    if isinstance(i[2], list):
     tmp = '('
     for j in i[2]:
      tmp += str(j) + ','
     tmp += ')'
     self.__where += '`' + i[0] + '` ' + i[1] + ' ' + tmp + ' AND '
    else:
     self.__where += '`' + i[0] + '` ' + i[1] + ' ' + str(i[2]) + ' AND '
   else:
    self.__where = self.__where[0:-4]
  else:
   self.__where += param
 
  return self
 
 # 排序
 def order(self, str):
  self.__order = ' ORDER BY ' + str
  return self
 
 # 数量
 def limit(self, str):
  self.__limit = ' LIMIT ' + str
  return self
 
 # 增加
 def insert(self, dict):
  key = value = ''
  for k, v in dict.items():
   key += '`' + k + '`,'
   value += '"' + v + '",'
 
  key = key[0:-1]
  value = value[0:-1]
 
  sql = 'INSERT INTO ' + self.table + ' (' + key + ') VALUES (' + value + ')'
  if self.__sql:
   return sql
 
  try:
   # 执行sql语句
   ret = self.cursor.execute(sql)
   # 提交到数据库执行
   self.db.commit()
   return ret
  except Exception as e:
   # 如果发生错误则回滚
   self.db.rollback()
   print(e)
   return 0
 
 # 删除
 def delete(self):
  if self.__where:
   sql = "DELETE FROM " + self.table + self.__where
   if self.__sql:
    return sql
 
   try:
    # 执行sql语句
    ret = self.cursor.execute(sql)
    # 提交到数据库执行
    self.db.commit()
    return ret
   except Exception as e:
    # 如果发生错误则回滚
    self.db.rollback()
    print(e)
    return 0
 
  else:
   raise BaseException('没有条件') # 抛异常
 
 # 修改
 def update(self, dict):
  str = ''
  for k, v in dict.items():
   str += '`' + k + '`="' + v + '",'
 
  str = str[0:-1]
  sql = 'UPDATE ' + self.table + ' SET ' + str
 
  if self.__where:
   sql += self.__where
  if self.__sql:
   return sql
 
  try:
   # 执行sql语句
   ret = self.cursor.execute(sql)
   # 提交到数据库执行
   self.db.commit()
   return ret
  except Exception as e:
   # 如果发生错误则回滚
   self.db.rollback()
   print(e)
   return 0
 
 # 查询
 def select(self):
  sql = "SELECT " + self.__field + " FROM " + self.table
 
  if self.__join:
   sql += self.__join
 
  if self.__where:
   sql += self.__where
 
  if self.__order:
   sql += self.__order
 
  if self.__limit:
   sql += self.__limit
 
  if self.__sql:
   return sql
 
  # 使用 execute() 方法执行 SQL 查询
  self.cursor.execute(sql)
 
  # 使用 fetchall() 方法获取所有数据.
  data = self.cursor.fetchall()
  return data
'''
DROP TABLE IF EXISTS `people`;
CREATE TABLE `people` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '名字',
 `sex` varchar(7) DEFAULT '' COMMENT '性别',
 `job` varchar(6) DEFAULT '' COMMENT '工作',
 `age` varchar(6) DEFAULT '' COMMENT '年龄',
 `height` varchar(6) DEFAULT '' COMMENT '身高',
 `weight` varchar(6) DEFAULT '' COMMENT '体重',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `people` VALUES ('1', '赵一', '男', '学生', '8', '120', '35');
INSERT INTO `people` VALUES ('2', '钱二', '女', '学生', '9', '111', '31');
INSERT INTO `people` VALUES ('3', '孙三', '男', '学生', '10', '123', '34');
INSERT INTO `people` VALUES ('4', '李四', '女', '学生', '11', '100', '30');
'''
db = DB('people')
 
# 增加
dict = {'name': '周五', 'sex': '男', 'job': '学生', 'age': '8', 'height': '121', 'weight': '32'}
data = db.insert(dict)
print(data)
 
# 删除
# data = db.where('id=6').delete()
# print(data)
 
# 修改
# dict = {'age': '9', 'height': '121', 'weight': '31'}
# data = db.where('id=7').update(dict)
# print(data)
 
# 查询 优化where条件 'id<11'
# data = db.field('id,name,age,job').where([['id', '>', 1]]).order('id desc').limit('3').select()
# print(data)

补充知识:python DB API cursor 常用接口

1. description

如果 cursor 执行了查询的 sql 代码。那么读取 cursor.description 属性的时候,将返回一个列表,这个列表中装的是元组,元组中装的分别

是 (name,type_code,display_size,internal_size,precision,scale,null_ok) ,其中 name 代表的是查找出来的数据的字段名称,其他参数暂时用处不大。

2. rowcount

代表的是在执行了 sql 语句后受影响的行数。

3. close

关闭游标。关闭游标以后就再也不能使用了,否则会抛出异常。

4. execute(sql[,parameters])

执行某个 sql 语句。如果在执行 sql 语句的时候还需要传递参数,那么可以传给 parameters 参数。示例代码如下:

cursor.execute("select * from article where id=%s",(1,))

5. fetchone

在执行了查询操作以后,获取第一条数据。

6. fetchmany(size)

在执行查询操作以后,获取多条数据。具体是多少条要看传的 size 参数。如果不传 size 参数,那么默认是获取第一条数据。

7. fetchall

获取所有满足 sql 语句的数据。

以上这篇python db类用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python比较两个列表是否相等的方法
Jul 28 Python
Python实现统计文本文件字数的方法
May 05 Python
pandas获取groupby分组里最大值所在的行方法
Apr 20 Python
用Python将mysql数据导出成json的方法
Aug 21 Python
pymongo中group by的操作方法教程
Mar 22 Python
Python3日期与时间戳转换的几种方法详解
Jun 04 Python
pyqt5 实现工具栏文字图片同时显示
Jun 13 Python
如何使用Python标准库进行性能测试
Jun 25 Python
python中pip的使用和修改下载源的方法
Jul 08 Python
django认证系统 Authentication使用详解
Jul 22 Python
Python如何利用Har文件进行遍历指定字典替换提交的数据详解
Nov 05 Python
Django与AJAX实现网页动态数据显示的示例代码
Feb 24 Python
python文件编写好后如何实践
Jul 07 #Python
python 删除excel表格重复行,数据预处理操作
Jul 06 #Python
pandas.DataFrame.drop_duplicates 用法介绍
Jul 06 #Python
TensorFlow Autodiff自动微分详解
Jul 06 #Python
Keras loss函数剖析
Jul 06 #Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 #Python
Python自省及反射原理实例详解
Jul 06 #Python
You might like
用穿越火线快速入门php面向对象
2012/02/22 PHP
php cookie 详解使用实例
2016/11/03 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
js post方式传递提交的实现代码
2010/05/31 Javascript
jquery 操作DOM的基本用法分享
2012/04/05 Javascript
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
2013/12/18 Javascript
Javascript 构造函数详解
2014/10/22 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
JS实现的文字与图片定时切换效果代码
2015/10/06 Javascript
BootStrap入门教程(一)之可视化布局
2016/09/19 Javascript
BootStrap Table 获取同行不同列元素的方法
2016/12/19 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
vue-cli开发时,关于ajax跨域的解决方法(推荐)
2018/02/03 Javascript
浅析微信小程序modal弹窗关闭默认会执行cancel问题
2019/10/14 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
python实现的一个火车票转让信息采集器
2014/07/09 Python
python搭建微信公众平台
2016/02/09 Python
使用urllib库的urlretrieve()方法下载网络文件到本地的方法
2018/12/19 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
python线程的几种创建方式详解
2019/08/29 Python
Python生成器常见问题及解决方案
2020/03/21 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
2020/08/07 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
鞋子女王塔玛拉·梅隆同名奢侈品牌:Tamara Mellon
2017/11/22 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
Oral-B荷兰:牙医最推荐的品牌
2020/02/25 全球购物
生态学毕业生自荐信
2013/10/27 职场文书
药剂专业学生求职信范文
2013/12/28 职场文书
《自选商场》教学反思
2014/02/14 职场文书
财务会计专业求职信
2014/06/09 职场文书
环境科学专业教师求职信
2014/07/12 职场文书
孔庙导游词
2015/02/04 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript
Nginx速查手册及常见问题
2022/04/07 Servers