python db类用法说明
时间:2022-07-27
本文章向大家介绍python db类用法说明,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
我就废话不多说了,大家还是直接看代码吧~
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类用法说明就是小编分享给大家的全部内容了,希望能给大家一个参考。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 【CPP】《程序员面试金典》习题(2)——链表
- 【CPP】《程序员面试金典》习题(3)——栈和队列
- PPYOLO:2020不容错过的目标检测调参Tricks
- 【笔记】《C++Primer》—— 第11章:关联容器
- 【笔记】《C++Primer》—— 第12章:动态内存
- 【笔记】《C++Primer》—— 第13章:拷贝控制
- 【笔记】《C++Primer》—— 第16章:模板与泛型编程
- 【笔记】《C++Primer》—— 第19章:特殊工具与技术
- 【翻译】C++14的新特性简介
- Python 为什么要有 pass 语句?
- 【翻译】C++17的新特性简介
- 各类SQL日期时间处理方法
- 这可能是最全最实用的Vim操作集合
- 个人珍藏的80道多线程并发面试题(1-10答案解析)
- 理解DOM Diff算法