python 数据库操作类
#安装PyMySQL:pip3 install PyMySQL
#!/usr/bin/python3
#coding=utf-8
#数据库操作类
from datetime import *
import pymysql
import hashlib
import time class SingletonModel:
#数据库连接对象
__db = None
#游标对象
__cursor = None
def __new__(self, *args, **kwargs):
if not hasattr(self, '_instance'):
self._instance = super().__new__(self)
#主机
host = 'host' in kwargs and kwargs['host'] or 'localhost'
#端口
port = 'port' in kwargs and kwargs['port'] or '3306'
#用户名
user = 'user' in kwargs and kwargs['user'] or 'root'
#密码
passwd = 'passwd' in kwargs and kwargs['passwd'] or '123456'
#数据库
db = 'db' in kwargs and kwargs['db'] or 'mypython'
#编码
charset = 'charset' in kwargs and kwargs['charset'] or 'utf8'
# 打开数据库连接
print('连接数据库')
self.__db = pymysql.connect(host=host,port=int(port),user=user,passwd=passwd,db=db,charset=charset)
#创建一个游标对象 cursor
#self.__cursor = self.__db.cursor()
self.__cursor = self.__db.cursor(cursor=pymysql.cursors.DictCursor)
return self._instance #返回执行execute()方法后影响的行数
def execute(self,sql):
self.__cursor.execute(sql)
rowcount = self.__cursor.rowcount
return rowcount #增->返回新增ID
def insert(self,**kwargs):
table = kwargs['table']
del kwargs['table']
sql = 'insert into %s set '%table
for k,v in kwargs.items():
sql += "`%s`='%s',"%(k,v)
sql = sql.rstrip(',')
print(sql)
try:
# 执行SQL语句
self.__cursor.execute(sql)
# 提交到数据库执行
self.__db.commit()
#获取自增id
res = self.__cursor.lastrowid
except:
# 发生错误时回滚
self.__db.rollback()
return res #删->返回影响的行数
def delete(self,**kwargs):
table = kwargs['table']
where = kwargs['where']
sql = 'DELETE FROM %s where %s'%(table,where)
print(sql)
try:
# 执行SQL语句
self.__cursor.execute(sql)
# 提交到数据库执行
self.__db.commit()
#影响的行数
rowcount = self.__cursor.rowcount
except:
# 发生错误时回滚
self.__db.rollback()
return rowcount #改->返回影响的行数
def update(self,**kwargs):
table = kwargs['table']
#del kwargs['table']
kwargs.pop('table') where = kwargs['where']
kwargs.pop('where') sql = 'update %s set '%table
for k,v in kwargs.items():
sql += "`%s`='%s',"%(k,v)
sql = sql.rstrip(',')
sql += ' where %s'%where
print(sql)
try:
# 执行SQL语句
self.__cursor.execute(sql)
# 提交到数据库执行
self.__db.commit()
#影响的行数
rowcount = self.__cursor.rowcount
except:
# 发生错误时回滚
self.__db.rollback()
return rowcount #查->单条数据
def fetchone(self,**kwargs):
table = kwargs['table']
#字段
field = 'field' in kwargs and kwargs['field'] or '*'
#where
where = 'where' in kwargs and 'where '+kwargs['where'] or ''
#order
order = 'order' in kwargs and 'order by '+ kwargs['order'] or '' sql = 'select %s from %s %s %s limit 1'%(field,table,where,order)
print(sql)
try:
# 执行SQL语句
self.__cursor.execute(sql)
# 使用 fetchone() 方法获取单条数据.
data = self.__cursor.fetchone()
except:
# 发生错误时回滚
self.__db.rollback()
return data #查->多条数据
def fetchall(self,**kwargs):
table = kwargs['table']
#字段
field = 'field' in kwargs and kwargs['field'] or '*'
#where
where = 'where' in kwargs and 'where '+kwargs['where'] or ''
#order
order = 'order' in kwargs and 'order by '+ kwargs['order'] or ''
#limit
limit = 'limit' in kwargs and 'limit '+ kwargs['limit'] or ''
sql = 'select %s from %s %s %s %s'%(field,table,where,order,limit)
print(sql)
try:
# 执行SQL语句
self.__cursor.execute(sql)
# 使用 fetchone() 方法获取单条数据.
data = self.__cursor.fetchall()
except:
# 发生错误时回滚
self.__db.rollback()
return data #析构函数,释放对象时使用
def __del__(self):
# 关闭数据库连接
self.__db.close()
print('关闭数据库连接') #生成md5
def makeMd5(mstr):
hmd5 = hashlib.md5()
hmd5.update(mstr.encode("utf-8"))
return hmd5.hexdigest() #获取unix时间戳
def getTime():
return round(time.time()) #时间格式化
def timeFormat(timestamp):
#return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(timestamp))
#return datetime.fromtimestamp(timestamp)
return datetime.utcfromtimestamp(timestamp) if __name__ == '__main__': dbObject = SingletonModel(host='localhost',port=3306,user='root',passwd='root',db='mypython',charset='utf8') #创建表
print('创建表:')
sql = "DROP TABLE IF EXISTS `user`;"
dbObject.execute(sql)
sql = '''
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`pwd` char(32) NOT NULL,
`insert_time` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';
'''
print(sql)
res = dbObject.execute(sql)
print(res) #写入数据
print('\n写入数据:')
pwd = makeMd5('123456')
insert_time = getTime()
res = dbObject.insert(table='user',name='aaaa',pwd=pwd,insert_time=insert_time)
print(res) time.sleep(1)
pwd = makeMd5('654321')
insert_time = getTime()
res = dbObject.insert(table='user',name='bbbb',pwd=pwd,insert_time=insert_time)
print(res) time.sleep(1)
pwd = makeMd5('111111')
insert_time = getTime()
res = dbObject.insert(table='user',name='cccc',pwd=pwd,insert_time=insert_time)
print(res) #查询数据-单条
print('\n查询数据-单条:')
res = dbObject.fetchone(table='user',where="name='cccc'")
print(res) #修改数据
print('\n修改数据:')
res = dbObject.update(table='user',where="id=1",name='dddd')
print(res) #删除数据
print('\n删除数据:')
res = dbObject.delete(table='user',where="id=2")
print(res) #查询数据-多条
print('\n查询数据-多条:')
res = dbObject.fetchall(table='user',order="id desc")
print(res,type(res))
if res:
for value in res:
print('name:%s,date:%s'%(value['name'],timeFormat(value['insert_time'])))
[chaoge@localhost db]$ python3 SingleModel.py
连接数据库
创建表:
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`pwd` char(32) NOT NULL,
`insert_time` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='用户表';
0
写入数据:
insert into user set `pwd`='e10adc3949ba59abbe56e057f20f883e',`name`='aaaa',`insert_time`='1517543918'
1
insert into user set `pwd`='c33367701511b4f6020ec61ded352059',`name`='bbbb',`insert_time`='1517543919'
2
insert into user set `pwd`='96e79218965eb72c92a549dd5a330112',`name`='cccc',`insert_time`='1517543920'
3
查询数据-单条:
select * from user where name='cccc' limit 1
{'pwd': '96e79218965eb72c92a549dd5a330112', 'id': 3, 'name': 'cccc', 'insert_time': 1517543920}
修改数据:
update user set `name`='dddd' where id=1
1
删除数据:
DELETE FROM user where id=2
1
查询数据-多条:
select * from user order by id desc
[{'pwd': '96e79218965eb72c92a549dd5a330112', 'id': 3, 'name': 'cccc', 'insert_time': 1517543920}, {'pwd': 'e10adc3949ba59abbe56e057f20f883e', 'id': 1, 'name': 'dddd', 'insert_time': 1517543918}] <class 'list'>
name:cccc,date:2018-02-01 22:58:40
name:dddd,date:2018-02-01 22:58:38
关闭数据库连接
python 数据库操作类的更多相关文章
- python/数据库操作补充—模板—Session
python/数据库操作补充—模板—Session 一.创建一个app目录 在models.py只能类进行进行创建表 class Foo: xx= 字段(数据库数据类型) 字段类型 字符串 Email ...
- 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~
最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
- PHP 数据库操作类:ezSQL
EZSQL类介绍: 下载地址:http://www.jb51.net/codes/26393.htmlezsql是一个小型的快速的数据库操作类,可以让你很容易地用PHP操作各种数据库( MySQL.o ...
- 通用数据库操作类,前端easyui-datagrid,form
实现功能: 左端datagrid显示简略信息,右侧显示选中行详细信息,数据库增删改 (1)点击选中行,右侧显示详细信息,其中[新增].[修改].[删除]按钮可用,[保存]按钮禁用 (2)点击[ ...
- php : mysql数据库操作类演示
设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...
- php MySQL数据库操作类源代码
php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...
- ecshop数据库操作类
ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现. 好处:实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小. 当网站需要做me ...
随机推荐
- MDX函数
MDX重点函数 成员函数 1..CurrentMember 获取运行时当前的成员,用法:<Dimension>.CurrentMember . 2..Parent 获取运行时当前的成员的父 ...
- kubernetes核心组件kube-proxy 学习总结
一. kube-proxy 和 service kube-proxy是Kubernetes的核心组件,部署在每个Node节点上,它是实现Kubernetes Service的通信与负载均衡机制的重 ...
- SAS PROC PRINT 常用选项和语句说明
常用选项1.使用选项OBS=修改观测序号标签2.使用NOOBS选项不显示观测序号列3.使用ID语句在输出中取代观测序号列4.使用VAR选择输出的变量5.使用WHERE语句选择输出的观测6.使用数据集选 ...
- 关于AsyncSocket
写篇博客,在我项目中用到了一个很重要的第三方---AsyncSocket,写下我对AsyncSocket使用心得.我的项目中是APP对硬件直接交互,APP对硬件发指令的时候不需要 ...
- PV、IV、UV
PV 访问量 UV 独立访客 IV 独立ip数 qps 流量
- Python · 进度条
(这里是本章会用到的 GitHub 地址) 我实现的这个进度条可能是可以当做一个第三方库来使用的(这个人好自大,啧),它支持记录并发程序的进度且损耗基本只来源于 Python 本身 先来看看我们的进度 ...
- 关于163发邮件报错535 Error:authentication failed解决方法
关于发邮件报错535 Error:authentication failed解决方法 调用163邮箱服务器来发送邮件,我们需要开启POP3/SMTP服务,这时163邮件会让我们设置客户端授权码,这个授 ...
- java性能优化总结
本人在java中积累了一些性能优化相关的经验,现在总结如下: 批量处理服务性能优化 RTB服务性能优化 BasicData线上问题解决,疯狂FullGC的问题 BasicData线上部分服务器cpu使 ...
- ADO.NET 基本操作
概要 ADO.NET是.NET框架中的重要组件,主要用于完成C#应用程序访问数据库,类似于PHP中的PDO 使用 连接数据库 (Connection对象) 1. 连接字符串 基本语法:数据源(Data ...
- 吴裕雄 python深度学习与实践(10)
import tensorflow as tf input1 = tf.constant(1) print(input1) input2 = tf.Variable(2,tf.int32) print ...