Pymysql操作封装成类

# 注意:在使用过程中,sql语句中占位符不用带引号。 

# 注意:本代码查询结果返回的是字典

# 注意:传入的参数应该是元组形式

import pymysql
# 注意:本代码查询结果返回的是字典
# 注意:传入的参数应该是元组形式

# 定义一个数据库相关的配置项
DB_CONFIG = {'host': '127.0.0.1',
             'user': 'root',
             'password': '818635',
             'port': 3306,
             'db': 'data_system',
             'charset': 'utf8'
             }

class SQLManager(object):
    # 连接数据库
    # 将conn,cursor作为类的属性,通过connect方法触发生成
    def __init__(self):
        self.conn = None
        self.cur = None
        self.connect()

    def connect(self):
        self.conn = pymysql.connect(
            host=DB_CONFIG['host'],
            port=DB_CONFIG['port'],
            user=DB_CONFIG['user'],
            password=DB_CONFIG['password'],
            # db=DB_CONFIG['db'],
            charset=DB_CONFIG['charset']
        )
        # 链接mysql
        self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor) # 注意这种方式链接数据库,查询结果返回的是字典
        # 若库不存在,则创建数据库;存在,则使用
        sql = 'CREATE DATABASE IF NOT EXISTS {}'.format(DB_CONFIG['db']) # 可以使用{}.format形式作为库名或表名的占位
        self.cur.execute(sql)
        self.cur.execute("use {}".format(DB_CONFIG['db']))
        # self.conn.select_db('data_system')
        # self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
        # return self.cur

    # 判断表是否在库中
    def table_exists(table_name):
        sql = "show tables;"
        self.cur.execute(sql)

        '''
        tables = con.fetchall()    
        table_list = []
        for i in tables:
            for j in i:
                table_list.append(j)
        print(table_list)
        '''
        tables = [con.fetchall()]    
        table_list = re.findall('(\'.*?\')', str(tables)) # 将列表转为字符串类型,以便能用正则将多重元组转为一维列表
        print('table_list 1 ===>>>',table_list)
        table_list = [re.sub("'", '', each) for each in table_list]
        print('table_list 2 ===>>>',table_list)    
        if table_name in table_list:
            # 存在返回1
            return 1
        else:
            # 不存在返回0
            return 0
    
    # 查询所有数据,传入的参数要是元组形式
    def many_query(self, sql, *args):
        try:
            self.cur.execute(sql, *args)
            print('数据库操作成功!')
            return self.cur.fetchall()
        except Exception as e:
            print('数据库查询失败!\n'+str(e))
            return False

    # 查询单条数据
    def single_query(self, sql, *args):
        try:
            # print(sql)
            # print(args)
            self.cur.execute(sql, *args)
            print('数据库操作成功!')
            return self.cur.fetchone()
        except Exception as e:
            print('数据库操作失败!\n'+str(e))
            return False

    # 单条增删改数据,创建表
    def modify(self, sql, *args):
        try:
            # print(args)
            self.cur.execute(sql, *args) # 修改,由arge改为*args
            self.conn.commit()
            print('数据库操作成功!')
            return True
        except Exception as e:
            print('数据库操作失败!\n'+str(e))
            return False
        
    # 批量增加数据
    def many_insert(self, sql, data):
        try:
            self.cur.executemany(sql, data)
            self.conn.commit()
            print('数据库操作成功!')
            return True
        except Exception as e:
            print('数据库操作失败!\n'+str(e))
            return False
    
    # 关闭数据库cursor和连接
    def close(self):
        self.cur.close()
        self.conn.close()
        print('数据库成功断开链接!')


if __name__ == '__main__':
    db = SQLManager()
    # 创建表.要注意表名和字段名用tab键上方的引号
    # sql = 'DROP TABLE IF EXISTS `ci_sessions`;'
    # sql = """CREATE TABLE IF NOT EXISTS `ci_sessions` (
    #        `session_id` VARCHAR(40) NOT NULL DEFAULT '0',
    #        `peopleid` INT(11) NOT NULL,
    #        `ip_address` VARCHAR(16) NOT NULL DEFAULT '0',
    #        `user_agent` VARCHAR(50) NOT NULL,
    #        `last_activity` INT(10) UNSIGNED NOT NULL DEFAULT '0',
    #        `LEFT` INT(11) NOT NULL,
    #        `name` VARCHAR(25) NOT NULL,
    #        `status` TINYINT(4) NOT NULL DEFAULT '0'
    #     ) ENGINE=MyISAM DEFAULT CHARSET=utf8;"""
    sql = 'select * from user_table where username=%s' # 注意占位符不带引号
    # sql = 'insert into user_table (username,password) values(%s,%s)'
    print(db.single_query(sql,('admin')))
    db.close()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值