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中分数的相关使用教程
Mar 30 Python
使用Python求解最大公约数的实现方法
Aug 20 Python
python中日志logging模块的性能及多进程详解
Jul 18 Python
python编程使用selenium模拟登陆淘宝实例代码
Jan 25 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
python批量图片处理简单示例
Aug 06 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
Python Numpy数组扩展repeat和tile使用实例解析
Dec 09 Python
python装饰器相当于函数的调用方式
Dec 27 Python
Python应用实现双指数函数及拟合代码实例
Jun 19 Python
Python在线和离线安装第三方库的方法
Oct 31 Python
让文件路径提取变得更简单的Python Path库
May 27 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者的疑难问答(2)
2006/10/09 PHP
php判断访问IP的方法
2015/06/19 PHP
如何使用Gitblog和Markdown建自己的博客
2015/07/31 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
php中使用GD库做验证码
2016/03/31 PHP
利用PHP访问带有密码的Redis方法示例
2017/02/09 PHP
使用PHP开发留言板功能
2019/11/19 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
showModelessDialog()使用详解
2006/09/07 Javascript
javascript对象的property和prototype是这样一种关系
2007/03/24 Javascript
JavaScript中prototype为对象添加属性的误区介绍
2013/10/15 Javascript
node.js文件上传处理示例
2016/10/27 Javascript
Bootstrap 轮播(Carousel)插件
2016/12/26 Javascript
js实现旋转木马效果
2017/03/17 Javascript
浅谈Node Inspector 代理实现
2017/10/19 Javascript
vue中引入mxGraph的步骤详解
2019/05/17 Javascript
vue 使用 vue-pdf 实现pdf在线预览的示例代码
2020/04/26 Javascript
Python MySQLdb Linux下安装笔记
2015/05/09 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Django进阶之CSRF的解决
2018/08/01 Python
python基础教程之while循环
2019/08/14 Python
python-序列解包(对可迭代元素的快速取值方法)
2019/08/24 Python
PYTHON实现SIGN签名的过程解析
2019/10/28 Python
Django 返回json数据的实现示例
2020/03/05 Python
Python图片处理模块PIL操作方法(pillow)
2020/04/07 Python
Python 如何对文件目录操作
2020/07/10 Python
Python3+Appium安装及Appium模拟微信登录方法详解
2021/02/16 Python
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
汽车专业大学生职业生涯规划范文
2014/01/07 职场文书
中级会计职业生涯规划范文
2014/01/16 职场文书
文明学生标兵事迹
2014/01/21 职场文书
小学生安全保证书
2014/02/01 职场文书
商场收银员岗位职责
2015/04/07 职场文书
2016年教育局“我们的节日——端午节”主题活动总结
2016/04/01 职场文书
导游词之江苏溱潼古镇
2019/11/27 职场文书
微信小程序实现聊天室功能
2021/06/14 Javascript