#安装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 数据库操作类的更多相关文章

  1. python/数据库操作补充—模板—Session

    python/数据库操作补充—模板—Session 一.创建一个app目录 在models.py只能类进行进行创建表 class Foo: xx= 字段(数据库数据类型) 字段类型 字符串 Email ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

  4. PHP 数据库操作类:ezSQL

    EZSQL类介绍: 下载地址:http://www.jb51.net/codes/26393.htmlezsql是一个小型的快速的数据库操作类,可以让你很容易地用PHP操作各种数据库( MySQL.o ...

  5. 通用数据库操作类,前端easyui-datagrid,form

    实现功能:     左端datagrid显示简略信息,右侧显示选中行详细信息,数据库增删改 (1)点击选中行,右侧显示详细信息,其中[新增].[修改].[删除]按钮可用,[保存]按钮禁用 (2)点击[ ...

  6. php : mysql数据库操作类演示

    设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ...

  7. php MySQL数据库操作类源代码

    php MySQL数据库操作类源代码: <?php class MySQL{ private $host; //服务器地址 private $name; //登录账号 private $pwd; ...

  8. 一个基于PDO的数据库操作类(新) 一个PDO事务实例

    <?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ...

  9. ecshop数据库操作类

    ECShop v2.7.2没有使用一些开源的数据库操作类,比如adodb或者PEAR,而是封装了自己的实现. 好处:实现非常轻量,只有一个文件,27Kb,大大减小了分发包的文件大小. 当网站需要做me ...

随机推荐

  1. sqlserver乱码问题解决

    * 如果是自己创建的数据库那么就应该在一开始就选择排序规则中的:Chinese_PRC_CI_AS 1.改变排序规则方法: 右击创建的数据库,属性→选项→排序规则中选择:Chinese_PRC_CI_ ...

  2. JavaBasic_正则表达式

    就是符合一定规则的字符串 规则字符在java.util.regex.Pattern类中 字符转义\. 匹配.字符\* 匹配*字符\\ 匹配\字符\n 新行(换行)符 ('\u000A') \r 回车符 ...

  3. php调用API支付接口 可个人使用,无需营业执照(使用第三方接口,调用的天工接口。)

    首先访问  https://charging.teegon.com/  注册账号, 找到开发配置   记下client_id和client_secret. 点击 天工开放平台 点击天工收银 点击  S ...

  4. C#委托防止事件多次注册

    示例代码如下: class NodeInf { public delegate void mydelegate(ProcessContent processContent); private myde ...

  5. 系统变量之System.getenv()和System.getProperty()

    Java提供了System类的静态方法getenv()和getProperty()用于返回系统相关的变量与属性,getenv方法返回的变量大多于系统相关,getProperty方法返回的变量大多与ja ...

  6. django之 基于queryset和双下划线的跨表查询

    前面篇随笔写的是基于对象的跨表查询:对象.objects.filter(...)  对象.关联对象_set.all(...)  -->反向 基于对象的跨表查询例如: book_obj= Book ...

  7. android 开发 View _2_ View的属性动画ObjectAnimator ,动画效果一览

    支持:https://www.cnblogs.com/whoislcj/p/5738478.html translationX的效果: protected void onCreate(Bundle s ...

  8. C++学习基础十六-- 函数学习笔记

    C++ Primer 第七章-函数学习笔记 一步一个脚印.循序渐进的学习. 一.参数传递 每次调用函数时,都会重新创建函数所有的形参,此时所传递的实参将会初始化对应的形参. 「如果形参是非引用类型,则 ...

  9. python练习题_02

    #1.有两个列表 l1=[11,22,33] l2=[22,33,44] #a.获取内容相同的元素列表 l3=[] for i in l1: if i in l2: l3.append(i) prin ...

  10. spring boot 日志介绍 以及 logback配置示例

    https://www.cnblogs.com/flying607/p/7827460.html 以下是springboot的一个局部依赖关系: 可以看到,java util logging(jul) ...