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 04 Python
使用PyV8在Python爬虫中执行js代码
Feb 16 Python
解决pandas中读取中文名称的csv文件报错的问题
Jul 04 Python
Django中更改默认数据库为mysql的方法示例
Dec 05 Python
Python qqbot 实现qq机器人的示例代码
Jul 11 Python
pycharm修改file type方式
Nov 19 Python
python pygame实现滚动横版射击游戏城市之战
Nov 25 Python
python 实现视频 图像帧提取
Dec 10 Python
基于TensorBoard中graph模块图结构分析
Feb 15 Python
django 多数据库及分库实现方式
Apr 01 Python
Python+PyQt5+MySQL实现天气管理系统
Jun 16 Python
OpenCV-Python实现怀旧滤镜与连环画滤镜
Jun 09 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
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
js动态创建、删除表格示例代码
2013/08/07 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
div失去焦点事件实现思路
2014/04/22 Javascript
setTimeout()递归调用不加引号出错的解决方法
2014/09/05 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
jQuery实现下拉框选择图片功能实例
2015/08/08 Javascript
JS实现自定义简单网页软键盘效果代码
2015/11/05 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
浅谈jQuery中的eq()与DOM中element.[]的区别
2016/10/28 Javascript
小程序自定义单页面、全局导航栏的实现代码
2019/03/15 Javascript
JS自定义对象创建与简单使用方法示例
2020/01/15 Javascript
Vue基于iview table展示图片实现点击放大
2020/08/05 Javascript
[15:35]教你分分钟做大人:天怒法师
2014/10/30 DOTA
简明 Python 基础学习教程
2007/02/08 Python
零基础写python爬虫之抓取百度贴吧并存储到本地txt文件改进版
2014/11/06 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python re模块的高级用法详解
2018/06/06 Python
django foreignkey(外键)的实现
2019/07/29 Python
Python中logging日志库实例详解
2020/02/19 Python
Python实现简单的2048小游戏
2021/03/01 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
艺术爱好者的自我评价分享
2013/10/08 职场文书
我的求职计划书
2014/01/10 职场文书
竞选班委演讲稿
2014/04/28 职场文书
1亿有多大教学反思
2014/05/01 职场文书
领导班子四风问题个人对照检查材料
2014/10/04 职场文书
观看焦裕禄观后感
2015/06/09 职场文书
2015年“我们的节日·中秋节”活动总结
2015/07/30 职场文书
2016五一手机促销广告语
2016/01/28 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
用Python实现一个打字速度测试工具来测试你的手速
2021/05/28 Python
比较几种Redis集群方案
2021/06/21 Redis
spring项目中切面及AOP的使用方法
2021/06/26 Java/Android
关于Python OS模块常用文件/目录函数详解
2021/07/01 Python