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多进程同步简单实现代码
Apr 27 Python
python操作字典类型的常用方法(推荐)
May 16 Python
Python机器学习之SVM支持向量机
Dec 27 Python
详解python 拆包可迭代数据如tuple, list
Dec 29 Python
谈谈python中GUI的选择
Mar 01 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
python 对key为时间的dict排序方法
Oct 17 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
Python自动重新加载模块详解(autoreload module)
Apr 01 Python
Django之choices选项和富文本编辑器的使用详解
Apr 01 Python
Django用内置方法实现简单搜索功能的方法
Dec 18 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新手上路(十)
2006/10/09 PHP
PHP中HTML标签过滤技巧
2014/01/07 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
js获取变量
2006/08/24 Javascript
JS 实现图片直接下载示例代码
2013/07/22 Javascript
调用HttpHanlder的几种返回方式小结
2013/12/20 Javascript
js获取数组的最后一个元素
2015/04/14 Javascript
jquery简单实现网页层的展开与收缩效果
2015/08/07 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
2018/07/06 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
vue组件入门知识全梳理
2020/09/21 Javascript
nodeJs项目在阿里云的简单部署
2020/11/27 NodeJs
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
简单上手Python中装饰器的使用
2015/07/12 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python向企业微信发送文字和图片消息的示例
2020/09/28 Python
python爬取微博评论的实例讲解
2021/01/15 Python
New Balance德国官方网站:购买鞋子和服装
2019/08/31 全球购物
俄罗斯汽车零件和配件在线商店:CarvilleShop
2019/11/29 全球购物
日本整理专家Marie Kondo的官方在线商店:KonMari
2020/06/29 全球购物
Eclipse面试题
2014/03/22 面试题
学校办公室主任职责
2013/12/27 职场文书
我们的节日元宵活动方案
2014/08/23 职场文书
用人单位聘用意向书
2015/05/11 职场文书
2016年劳模先进事迹材料
2016/02/25 职场文书
学校趣味运动会开幕词
2016/03/04 职场文书
医生行业员工的辞职信
2019/06/24 职场文书
MySQL REVOKE实现删除用户权限
2021/06/18 MySQL
i5-10400f处理相当于i7多少水平
2022/04/19 数码科技
Java实现注册登录跳转
2022/06/16 Java/Android