Python3操作MySQL基于PyMySQL封装的类
Python3操作MySQL基于PyMySQL封装的类
在未使用操作数据库的框架开发项目的时候,我们需要自己处理数据库连接问题,今天在做一个Python的演示项目,写一个操作MySQL数据库的类,基于PyMySQL库在Python3上实现。在写业务逻辑代码的时候,可以方便很多,时间关系,没有写太完善,只写了常用的操作。
直接上代码:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'Python连接到 MySQL 数据库及相关操作(基于Python3)'
import pymysql.cursors
class Database:
""" Python连接到 MySQL 数据库及相关操作 """
"""
conf: 类参数,数据库的连接参数配置字典,含host、port、user、pw、db、charset(可选,默认utf8)
connected: 属性,True数据库连接成功,False连接失败
insert(self, table, val_obj): 方法,插入数据到数据表
table: 数据表名称
val_obj: 待插入数据的字段名和值的键值对字典
返回: 成功则返回新插入数据的主键ID,失败返回False
update(self, table, val_obj, range_str): 方法,更新数据表中的数据
table: 数据表名称
val_obj: 待更新数据的字段名和值的键值对字典
range_str: 更新范围的条件语句字符串
返回: 成功返回更新的行数,失败返回False
delete(self, table, range_str): 方法,在数据表中删除数据
table: 数据表名称
range_str: 删除范围的条件语句字符串
返回: 成功返回删除的行数,失败返回False
select_one(self, table, factor_str, field='*'): 方法,查询表中符合条件唯一的一条数据
table: 数据表名称
factor_str: 查询唯一条件语句字符串
field: 查询结果返回哪些字段,多个用逗号分隔,可选参数,默认返回所有字段
返回: 成功返回一条数据的字段名与值的一维字典,失败返回False
select_more(self, table, range_str, field='*'): 方法,查询表中符合条件的所有数据
table: 数据表名称
range_str: 查询条件语句字符串
field: 查询结果返回哪些字段,多个用逗号分隔,可选参数,默认返回所有字段
返回: 成功返回多条数据的字段名与值的二维字典,失败返回False
count(self, table, range_str='1'): 方法,统计数据表中符合条件的总函数
table: 数据表名称
range_str: 查询条件语句字符串,可选参数,默认表中所有行数
返回: 成功返回符合条件的行数,失败返回False
sum(self, table, field, range_str='1'): 方法,对数据表中某数值类型字段求和
table: 数据表名称
field: 需要求和的字段,可以是多个字段的计算公式
range_str: 需要求和的条件语句字符串,可选参数,默认表中所有行
返回: 成功返回求和结果,失败返回False
close(self): 方法,关闭数据库连接,对象销毁时也会自动关闭,所以多数时候不用特意调用
"""
connected = False
__conn = None
# 构造函数,初始化时直接连接数据库
def __init__(self, conf):
if type(conf) is not dict:
print('错误: 参数不是字典类型!')
else:
for key in ['host', 'port', 'user', 'pw', 'db']:
if key not in conf.keys():
print('错误: 参数字典缺少 %s' % key)
if 'charset' not in conf.keys():
conf['charset'] = 'utf8'
try:
self.__conn = pymysql.connect(
host=conf['host'],
port=conf['port'],
user=conf['user'],
passwd=conf['pw'],
db=conf['db'],
charset=conf['charset'],
cursorclass=pymysql.cursors.DictCursor)
self.connected = True
except pymysql.Error as e:
print('数据库连接失败:', end='')
# 插入数据到数据表
def insert(self, table, val_obj):
sql_top = 'INSERT INTO ' + table + ' ('
sql_tail = ') VALUES ('
try:
for key, val in val_obj.items():
sql_top += key + ','
sql_tail += val + ','
sql = sql_top[:-1] + sql_tail[:-1] + ')'
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return self.__conn.insert_id()
except pymysql.Error as e:
self.__conn.rollback()
return False
# 更新数据到数据表
def update(self, table, val_obj, range_str):
sql = 'UPDATE ' + table + ' SET '
try:
for key, val in val_obj.items():
sql += key + '=' + val + ','
sql = sql[:-1] + ' WHERE ' + range_str
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.rowcount
except pymysql.Error as e:
self.__conn.rollback()
return False
# 删除数据在数据表中
def delete(self, table, range_str):
sql = 'DELETE FROM ' + table + ' WHERE ' + range_str
try:
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.rowcount
except pymysql.Error as e:
self.__conn.rollback()
return False
# 查询唯一数据在数据表中
def select_one(self, table, factor_str, field='*'):
sql = 'SELECT ' + field + ' FROM ' + table + ' WHERE ' + factor_str
try:
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.fetchall()[0]
except pymysql.Error as e:
return False
# 查询多条数据在数据表中
def select_more(self, table, range_str, field='*'):
sql = 'SELECT ' + field + ' FROM ' + table + ' WHERE ' + range_str
try:
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.fetchall()
except pymysql.Error as e:
return False
# 统计某表某条件下的总行数
def count(self, table, range_str='1'):
sql = 'SELECT count(*)res FROM ' + table + ' WHERE ' + range_str
try:
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.fetchall()[0]['res']
except pymysql.Error as e:
return False
# 统计某字段(或字段计算公式)的合计值
def sum(self, table, field, range_str='1'):
sql = 'SELECT SUM(' + field + ') AS res FROM ' + table + ' WHERE ' + range_str
try:
with self.__conn.cursor() as cursor:
cursor.execute(sql)
self.__conn.commit()
return cursor.fetchall()[0]['res']
except pymysql.Error as e:
return False
# 销毁对象时关闭数据库连接
def __del__(self):
try:
self.__conn.close()
except pymysql.Error as e:
pass
# 关闭数据库连接
def close(self):
self.__del__()
Python3操作MySQL基于PyMySQL封装的类的更多相关文章
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- python3操作mysql教程
一.下载\安装\配置 1. python3 Python3下载网址:http://www.python.org/getit/ 当前最新版本是python3.2,下载地址是 http://www.pyt ...
- python3操作MySQL的模块pymysql
本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中 ...
- python操作mysql(pymysql + sqlalchemy)
pymysql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同. 下载安装 pip3 install pymysql 使用操作 1.执行sql #!/usr/bi ...
- python3操作MySQL数据库
安装PyMySQL 下载地址:https://pypi.python.org/pypi/PyMySQL 1.把操作Mysql数据库封装成类,数据库和表先建好 import pymysql.cursor ...
- python操作mysql之pymysql
pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持3.x版本. 本文测试python版本:2.7.11.mys ...
- Python自动化运维之18、Python操作 MySQL、pymysql、SQLAchemy
一.MySQL 1.概述 什么是数据库 ? 答:数据的仓库,和Excel表中的行和列是差不多的,只是有各种约束和不同数据类型的表格 什么是 MySQL.Oracle.SQLite.Access.MS ...
- (转)Python中操作mysql的pymysql模块详解
原文:https://www.cnblogs.com/wt11/p/6141225.html https://shockerli.net/post/python3-pymysql/----Python ...
- Python操作MySQL:pymysql和SQLAlchemy
本篇对于Python操作MySQL主要使用两种方式: 原生模块 pymsql ORM框架 SQLAchemy pymsql pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb ...
随机推荐
- 简而意赅 HTTP HTTPS SSL TLS 之间有什么不同
HTTP HTTPS SSL TLS 之间有什么不同? SSL是Secure Sockets Layer的缩写.SSL的作用是为网络上的两台机器或设备提供了一个安全的通道. TLS是SSL的一个新的名 ...
- 【解决】http: server gave HTTP response to HTTPS client
[问题]上传镜像到私有仓库时报错 $ docker push xxx.xxx.xxx.xxx:5000/java-8 The push refers to repository [xxx.xxx.xx ...
- matlab安装出现“无法访问所在网络位置”的正确解决办法
今天安装matlab时出现了如下错误:无法访问您试图使用的功能所在的网络位置,单击"确认"重试或者在下面输入包含"vcredist.msc"的文件夹路径. (由 ...
- 【Web技术】337- 秒懂 Web 缓存
点击上方"前端自习课"关注,学习起来~ 最近把前端缓存重新整理了一下,从整体的层面上把前端所有能用的缓存方案梳理了一遍.同时,对于http缓存,使用了表格的方案,使得原先晦涩难记的 ...
- 文件(图片)转base64
普通图片转base64 function getBase64(url, callback){ var canvas = document.createElement('canvas'),//创建can ...
- vue 双语言切换中,data内翻译文字不正常切换的解决方案
背景 有这么一个登录页面,相关功能如下: 支持双语言,点击切换语言 表单内部有一个自定义的select,里面option的label.value都是的名字由外部提供:其中预设的option的label ...
- DefinePlugin插件用法
作者:水涛 座右铭:天行健,君子以自强不息 自白:我写博文上来蹭蹭就是干,我突然觉得我需要幽默一点了,好了,下面我们说正经的 一.官方定义: DefinePlugin DefinePlugin 允许创 ...
- 线程中put(None)和主函数中put(None)的区别和用法
''' 初试生产者消费者模型代码 分析: 对象含有生产者.队列.消费者 Queue队列模块,不适合传大文件,通常传一些消息. ''' '''多生产者进程和多消费者进程''' #导入模块 from mu ...
- python并发之多进程
#mutiprocessing模块 python中的多线程无法利用多核优势,如果想要充分地使用多核CPU的资源(os.cpu_count()查看),在python中大部分情况需要使用多进程.Pytho ...
- 十分钟学会Markdown基本语法
文章目录 Markdown 语法 一.标题 这是一级标题 这是二级标题 这是三级标题 这是四级标题 这是五级标题 这是六级标题 二.字体 三.引用 四.分割线 五.图片 六.超链接 七.列表 八.表格 ...