基于Pymysql的数据库的增删改查模版(4)——删除

基于Pymysql的数据库的增删改查模版(4)——删除

最近在利用Pymysql进行数据库交互时,为了提高程序的可扩展性,实现了一套基本的数据库查询、插入、更新、删除模版,记录下来供日后使用

ps:考虑到文章的独立阅读性,保持了一些重复的内容

环境

Mysql 5.7.2 理论上对于数据库版本没有特殊要求

pymsql 0.9.3

python >= 3.6 保证格式化字符串的使用

Mysql删除操作语法

DELEDE FROM `tablename` 
WHERE field1=value1 AND field2=value2 AND ... AND fieldN=valueN

数据库删除:类模版实现

初始化

class DeleteDB:
    def __init__(self):
        self.db = pymysql.connect('localhost', 'root', 'password', 'database_name')
        self.cursor = self.db.cursor()

初始化部分涉及到数据库的连接,这一部分比较简单,主要是创建游标对象self.cursor,用于执行SQL语句

更新事务基本框架

def modify_query(self, query):
    try:
        self.cursor.execute(query)
        self.db.commit()
        return True
    except Exception as error:
        self.db.rollback()
        return str(error)

这一部分使用游标对象执行SQL语句,正确执行后commit结果至数据库,出现错误时进行rollback,并返回错误信息,比较简单

更新指定记录

设定为按照给定的顺序进行插入

    def delete_info(self, tablename, **kwargs):
        """
        :param tablename:  被删除记录的数据库表名
        :param kwargs:
        """
        pattern = lambda k: "'" + str(k).replace("'", "\\'") + "'"
        items = ['`' + item[0] + '` = ' + pattern(item[1]) for item in kwargs.items()]
        query = f"""DELETE FROM  {'`' + tablename + '`'} WHERE ( {(' AND '.join(items))} );"""
        result = self.modify_query(query)
        return result

更新的关键有三个部分,分别是:

  • python的lambda表达式,用于对传入字段进行预处理
  • python的函数的可变参数
  • python的格式化字符串,也就是f'xxx' 类型的字符串

下面讲解一下SQL语句生成的部分:

  1. **kwargs 参数实际传入一个字典类型的变量,包含了WHERE子句筛选的条件
{
    'field1':'value1',
    'field2':'value2',
    ...
    'fieldN':'valueN'
}
  1. 通过列表生成式以及lambda表达式共同作用*kwargs生成需要WHERE子句筛选条件,如下所示
["`field1`= 'value1'", "`field2` = 'value2'",..., "`fieldN`= 'valueN'"]
  1. 通过' AND '.join()即可将其拼接成为如下字符串
"`field1`= 'value1' AND `field2` = 'value2' AND ... AND `fieldN`= 'valueN'"

⚠️,此处的AND 两端各有一个空格,以保证正确的连接筛选条件

  1. 生成SQL删除语句
DELEDE FROM `tablename` 
WHERE field1=value1 AND field2=value2 AND ... AND fieldN=valueN

完整代码

import pymysql


class DeleteDB:
    def __init__(self):
        self.db = pymysql.connect('localhost', 'root', 'mk123456', 'ST')
        # self.db = pymysql.connect('localhost', 'root', 'password', 'database_name')
        self.cursor = self.db.cursor()

    # 管理基本框架
    def modify_query(self, query):
        try:
            self.cursor.execute(query)
            self.db.commit()
            return True
        except Exception as error:
            self.db.rollback()
            return str(error)

    def delete_info(self, tablename, **kwargs):
        """
        :param tablename:  被删除记录的数据库表名
        :param kwargs:
        """
        pattern = lambda k: "'" + str(k).replace("'", "\\'") + "'"
        items = ['`' + item[0] + '` = ' + pattern(item[1]) for item in kwargs.items()]
        query = f"""DELETE FROM  {'`' + tablename + '`'} WHERE  {(' AND '.join(items))} ;"""
        result = self.modify_query(query)
        return result

调用示例

deletedb = DeleteDB()
result = deletedb.delete_info('tablename', field=value1,
                              field2=value2,...,fieldN=valueN)

其中:

  • tablename为待删除记录所在的表名

  • field是WHERE子句筛选的属性列名

  • value是WHERE子句筛选的属性列值

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值