zoukankan      html  css  js  c++  java
  • python操作mysql数据库增删改查的dbutils实例

    python操作mysql数据库增删改查的dbutils实例


    # 数据库配置文件

    # cat gconf.py
    
    #encoding=utf-8
    import json
    # json里面的字典不能用单引号,一定要用双引号
    USER_FILE='users.json'
    
    # mysql数据库连接信息
    MYSQL_HOST = '192.168.3.91'
    MYSQL_PORT = 3306
    MYSQL_USER = 'root'
    MYSQL_PASSWORD = 'root'
    MYSQL_DB = 'cmdb'
    MYSQL_CHARSET = 'utf8'
    
    # 邮件发送的信息
    SMTP_SERVER_HOST='smtp.exmail.qq.com'
    SMTP_SERVER_PORT=25
    SMTP_USER='jack@qq.com'
    # 邮箱客户端专用密码
    SMTP_PWD='pass'
    
    # 接收邮件
    ALARM_RECIVE = ['admin@163.com']
    
    # app验证信息
    APP_KEY = 'adI23SaE926DSslieo'
    APP_SECRET = 'adI23SaE926DSslieo'

    # 操作数据库增删改查的dbutils.py代码

    #encoding=utf-8
    
    import MySQLdb
    
    import gconf
    
    # 主类
    class MysqlConnection(object):
        def __init__(self, host, port, user, passwd, db, charset='utf8'):
            self.__host = host
            self.__port = port
            self.__user = user
            self.__passwd = passwd
            self.__db = db
            self.__charset = charset
            self.__conn = None
            self.__cur = None
            self.__connect()
        # 连接数据库
        def __connect(self):
            try:
                self.__conn = MySQLdb.connect(host = self.__host, port = self.__port,
                user = self.__user, passwd = self.__passwd,
                 db = self.__db, charset = self.__charset)
    
                self.__cur = self.__conn.cursor()
            except BaseException as e:
                print e
        
        def close(self):
            # 在关闭连接之前将内存中的文件写入磁盘
            self.commit()
            if self.__cur:
                self.__cur.close()
                self.__cur = None
    
            if self.__conn:
                self.__conn.close()
                self.__conn = None
        # 设置提交
        def commit(self):
            if self.__conn:
                self.__conn.commit()
        
        def execute(self, sql, args = ()):
            _cnt = 0
            if self.__cur:
                self.__cur.execute(sql, args)
            return _cnt
    
        def fetch(self, sql, args = ()):
            _cnt = 0
            rt_list = []
            # _cnt = self.execute(sql, args)
            if self.__cur:
                
                _cnt = self.__cur.execute(sql, args)
                rt_list = self.__cur.fetchall()
            return _cnt, rt_list
    
        @classmethod
        def execute_sql(cls, sql, args=(), fetch = True):
            count = 0
            rt_list = []
            conn = MysqlConnection(host = gconf.MYSQL_HOST, port = gconf.MYSQL_PORT,
                user = gconf.MYSQL_USER, passwd = gconf.MYSQL_PASSWORD, db = gconf.MYSQL_DB,
                charset = gconf.MYSQL_CHARSET)
            print sql
            if fetch:
                count, rt_list = conn.fetch(sql, args)
            else:
                count = conn.execute(sql, args)
            conn.close()
            print rt_list
            return count, rt_list
    
    
    def execute_fetch_sql(sql, args = (), fetch = True):
        return execute_sql(sql, args, fetch)
    
    def execute_commit_sql(sql, args = (), fetch = False):
        return execute_sql(sql, args, fetch)
    
    # 区别在于是查询还是修改,增加,删除操作,用fetch来标识
    def execute_sql(sql, args = (), fetch = True):
        cur = None
        conn = None
        count = 0
        rt = ()
        try:
            conn = MySQLdb.connect(host = gconf.MYSQL_HOST, port = gconf.MYSQL_PORT,
                user = gconf.MYSQL_USER, passwd = gconf.MYSQL_PASSWORD, db = gconf.MYSQL_DB,
                charset = gconf.MYSQL_CHARSET)
    
            cur = conn.cursor()
            print 'dbutils sql:%s, args = %s' % (sql, args)
            count = cur.execute(sql, args)
            # 如果是查询
            if fetch:
                rt = cur.fetchall()
                # if args:
                #     rt = cur.fetchone()
                # else:
                #     rt = cur.fetchall()
            else:
                conn.commit()
    
        except BaseException, e:
            print e
        finally:
            if cur:
                cur.close()
            if conn:
                conn.close()
        print 'dbutils:%s,%s' %(count,rt)
        return count,rt
    
    # 批量插入数据库
    def batch_execute_sql(sql, rt_list = []):
        cur = None
        conn = None
        count = 0
        rt = ()
    
        try:
            conn = MySQLdb.connect(host = gconf.MYSQL_HOST, port = gconf.MYSQL_PORT,
                user = gconf.MYSQL_USER, passwd = gconf.MYSQL_PASSWORD, db = gconf.MYSQL_DB,
                charset = gconf.MYSQL_CHARSET)
    
            cur = conn.cursor()
            print sql
            # 循环执行插入语句,一次性全部提交
            for line in rt_list:
                count += cur.execute(sql, line)
            conn.commit()
    
        except BaseException, e:
            print e
        finally:
            if cur:
                cur.close()
            if conn:
                conn.close()
    
        return count
    
    # 测试代码
    if __name__ == '__main__':
        # conn = MysqlConnection(host = gconf.MYSQL_HOST, port = gconf.MYSQL_PORT,
        #         user = gconf.MYSQL_USER, passwd = gconf.MYSQL_PASSWORD, db = gconf.MYSQL_DB,
        #         charset = gconf.MYSQL_CHARSET)
        
        # # conn.execute('insert into user(username) values(%s)', ('jack123',))
        # cnt, rt_list = conn.fetch('select * from user')
        # print cnt,rt_list
        # conn.close()
        count, rt_list = MysqlConnection.execute_sql('insert into user(username) values(%s)',('tomkeeper',))
        print rt_list
  • 相关阅读:
    Docker 使用笔记 (一)
    oracle 截取字符(substr),检索字符位置(instr)
    oracle表空间配额(quota)与UNLIMITED TABLESPACE系统权限
    把大象放到eclipse分几步?
    hadoop -- 搭建集群小工具
    1. Mybatis简单操作
    SpringMVC --- 拦截器 HandlerInterceptor
    Spring MVC --- 异步请求
    Spring MVC--RequestMapping
    Spring MVC 异常控制
  • 原文地址:https://www.cnblogs.com/reblue520/p/7884365.html
Copyright © 2011-2022 走看看