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 相关文章推荐
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
python3 打开外部程序及关闭的示例
Nov 06 Python
django2笔记之路由path语法的实现
Jul 17 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python3实现单目标粒子群算法
Nov 14 Python
tensorflow模型继续训练 fineturn实例
Jan 21 Python
Python生成六万个随机,唯一的8位数字和数字组成的随机字符串实例
Mar 03 Python
Python实现读取并写入Excel文件过程解析
May 27 Python
Python如何执行系统命令
Sep 23 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
Jan 23 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
getJSON跨域SyntaxError问题分析
2014/08/07 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP模拟asp.net的StringBuilder类实现方法
2015/08/08 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
php实现分页功能的详细实例方法
2019/09/29 PHP
深入分析js中的constructor和prototype
2012/04/07 Javascript
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
解析javascript 浏览器关闭事件
2013/07/08 Javascript
举例简介AngularJS的内部语言环境
2015/06/17 Javascript
基于JavaScript实现表单密码的隐藏和显示出来
2016/03/02 Javascript
javascript求日期差的方法
2016/03/02 Javascript
ionic实现滑动的三种方式
2016/08/27 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
angular2 组件之间通过service互相传递的实例
2018/09/30 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
JavaScript事件循环及宏任务微任务原理解析
2020/09/02 Javascript
webpack4从0搭建组件库的实现
2020/11/29 Javascript
从Python程序中访问Java类的简单示例
2015/04/20 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
Python日志syslog使用原理详解
2020/02/18 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
Keras 使用 Lambda层详解
2020/06/10 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
把富文本的回车转为br标签
2019/08/09 HTML / CSS
一个精品风格的世界:Atterley
2019/05/01 全球购物
欧缇丽加拿大官方网站:Caudalie加拿大
2019/07/18 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
党员岗位承诺书
2014/03/25 职场文书
中国在我心中演讲稿
2014/09/13 职场文书
会计专业自荐信范文
2019/05/22 职场文书
python unittest单元测试的步骤分析
2021/08/02 Python
Golang 实现 WebSockets 之创建 WebSockets
2022/04/24 Golang