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: Python3 pymysql操作封装是指将pymysql库中的常用操作进行封装,以便在项目中更方便地使用。这些操作包括连接数据库、执行SQL语句、获取查询结果等。通过封装,可以简化代码,提高代码的可读性和可维护性。同时,还可以避免SQL注入等安全问题。 ### 回答2: Python是一种高级编程语言,使用Python能够快速高效地进行开发,因此在众多的Python库和框架中,Pymysql是其中一种广泛使用的数据库库,也是Python3中最常用的MySQL数据库库之一。Pymysql库首次发布于2012年,是Python3中用于操作MySQL数据库的库,其使用简单、性能优良,是Python开发者数据库应用开发的重要工具,下面是Python3 Pymysql操作封装: 1. 连接数据库 Pymysql库连接MySQL数据库的方式是创建一个数据库连接对象,使用连接对象对MySQL进行操作。连接数据库的示例代码如下: ```python import pymysql # 创建一个数据库连接对象 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test') # 创建游标对象 cursor = conn.cursor() # 关闭游标对象 cursor.close() # 关闭数据库连接 conn.close() ``` 2. 执行SQL语句 使用Pymysql库执行SQL语句的方式是使用游标对象进行操作。执行SQL语句的示例代码如下: ```python import pymysql # 创建一个数据库连接对象 conn = pymysql.connect(host='localhost', port=3306, user='root', password='password', database='test') # 创建游标对象 cursor = conn.cursor() # 执行SQL语句 cursor.execute('select * from student;') # 获取查询结果 result = cursor.fetchall() # 打印查询结果 print(result) # 关闭游标对象 cursor.close() # 关闭数据库连接 conn.close() ``` 3. 封装Pymysql操作 为了方便使用和开发,可以将Pymysql库的操作进行封装。使用Python将Pymysql库进行封装,能够简化操作过程和提高开发效率。封装Pymysql库的示例代码如下: ```python import pymysql class MySQL(object): """ Pymysql操作封装 """ def __init__(self, host, port, user, password, database): """ :param host: 数据库主机地址 :param port: 数据库连接端口 :param user: 数据库用户名 :param password: 数据库连接密码 :param database: 数据库名称 """ self.host = host self.port = port self.user = user self.password = password self.database = database self.conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password, database=self.database) self.cursor = self.conn.cursor() def execute(self, sql): """ 执行SQL查询语句 :param sql: SQL查询语句 :return: 执行结果 """ self.cursor.execute(sql) result = self.cursor.fetchall() return result def close(self): """ 关闭游标对象和数据库连接 """ self.cursor.close() self.conn.close() ``` 上述代码中,MySQL的__init__方法会负责打开数据库连接、设置游标对象等,execute方法用于执行SQL语句,并返回执行结果,close方法用于关闭游标对象和数据库连接。 以上是对Pymysql库在Python3中的操作封装的简单介绍。Pymysql的使用具有高效性和灵活性,为Python处理MySQL数据库数据提供了更加强大的支持。当然,我们在真正使用Pymysql库时,还需要根据自己的需要进行具体的操作和改造。 ### 回答3: Python是一种简单易读,灵活和功能丰富的编程语言,扩展模块庞大。MySQL是流行的关系型数据库的一种,而pymysql是Python和MySQL之间的一个连接器。Pymysql将Python操作数据库变得更加容易和高效,特别是当你处理大量数据和多任务应用时。在本文中,我们将讨论Python3 pymysql操作封装pymysql是Python针对MySQL的一个纯Python客户端。它提供了与MySQL数据库进行连接、查询、执行语句和交互的API。在开发项目时,有必要封装pymysql,以便我们可以在不用考虑底层细节的情况下轻松和高效地访问数据库。下面是Python3 pymysql操作封装的简单实现: 首先,需要安装pymysql模块,它可以使用pip进行安装。 pip install pymysql 然后我们可以编写一个基本,工厂模式的设计可以实现该的单例实例化: import pymysql class MysqlHelper(object): __instance = None def __new__(cls, *args, **kwargs): if cls.__instance is None: cls.__instance = object.__new__(cls) cls.__instance.conn = pymysql.connect( host='localhost', port=3306, user='root', password='root', database='test', charset='utf8' ) cls.__instance.cursor = cls.__instance.conn.cursor() return cls.__instance def __del__(self): self.close() def execute(self, sql, params=None): try: self.cursor.execute(sql, params) self.conn.commit() except Exception as e: self.conn.rollback() raise e def execute_one(self, sql, params=None): try: self.cursor.execute(sql, params) result = self.cursor.fetchone() self.conn.commit() return result except Exception as e: self.conn.rollback() raise e def execute_all(self, sql, params=None): try: self.cursor.execute(sql, params) results = self.cursor.fetchall() self.conn.commit() return results except Exception as e: self.conn.rollback() raise e def close(self): if self.cursor: try: self.cursor.close() except: pass if self.conn: try: self.conn.close() except: pass 此中包含连接MySQL数据库的基本信息,实现了单例模式,并提供了execute,execute_one,execute_all和close方法。这些方法可以执行数据库查询、执行语句和关闭连接等。它们是最常用和重要的pymysql方法之一,可以轻松地完成MySQL数据库操作。 我们可以在代码中调用这些方法来进行数据库操作: (1)执行语句: mysql_helper = MysqlHelper() mysql_helper.execute("insert into user(name, age) values ('zhangsan', 23)") (2)查询单行数据: mysql_helper = MysqlHelper() result = mysql_helper.execute_one("select * from user where name = %s", ["zhangsan"]) (3) 查询多行数据 : mysql_helper = MysqlHelper() results = mysql_helper.execute_all("select * from user") (4)关闭连接: mysql_helper = MysqlHelper() mysql_helper.close() 综上所述,Python3 pymysql操作封装可以使用单例模式和工厂模式来实现,这使得在访问MySQL数据库操作简单和轻松。最后,我们还可以将pymysql封装与Python的其他模块和框架一起使用,这有助于提高代码复用性和可读性,使项目开发更加高效和便捷。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值