基于Pymysql的数据库的增删改查模版(1)——单表查询

本文介绍了一个基于Pymysql的数据库查询模版,实现了单表查询功能。模版包括数据库连接初始化、SQL语句执行及错误处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基于Pymysql的数据库的增删改查模版(1)——单表查询

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

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

环境

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

pymsql 0.9.3

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

Mysql查询操作语法

  1. 查询单表的指定属性列全部记录
SELECT `field1`, `field2`,...,`fieldN` FROM `tablename`

数据库查询:类模版实现

初始化

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

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

查询基本框架

def execute_query(self, query):
    try:
        self.cursor.execute(query)
        return self.cursor.fetchall()
    except Exception as error:
        self.db.rollback()
        return error

这一部分使用游标对象执行SQL语句,出现错误时进行rollback,并返回错误信息,比较简单

单表查询指定属性

# 获取特定表的指定属性的全部记录
def get_specified_records(self, tablename, *args):
    """
    :param tablename: 查询的表名
    :param args: 可变参数——查询的属性列
    :return: 数据库查询结果
    """
    # 根据表名以及属性列值进行数据库查询SQL语句生成
    query = f'''SELECT {','.join('`' + field + '`' for field in args)} 
		        FROM {'`' + tablename + '`'};'''
    return self.execute_query(query)

查询的关键有两个部分,分别是:

  • python函数的可变参数
  • python格式化字符串,也就是f'xxx' 类型的字符串

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

  1. *args 参数实际传入一个元组类型的变量,包含了属性列的名称,通过列表生成式遍历这一变量即可创建查询的属性列
'`' + field + '`' for field in args
  1. 生成如下列表
['`field1`', '`field2`',...,'`fieldN`']
  1. 通过','.join()即可将其拼接成为如下字符串
"`field1` , `field2`' ,..., `fieldN`"
  1. 生成SQL查询语句
SELECT `field1` , `field2` ,..., `fieldN`' FROM `tablename`;

考虑传入的*args 参数包含表中全部属性列,则该SQL语句完成查询单表全部记录。

完整代码

class QueryDB:
    def __init__(self):
        self.db = pymysql.connect('localhost', 'root', 'xxx', 'xxx')
        self.cursor = self.db.cursor()

    # 查询基本框架
    def execute_query(self, query):
        try:
            self.cursor.execute(query)
            return self.cursor.fetchall()
        except Exception as error:
            self.db.rollback()
            return error
	
    # 获取特定表的指定属性的全部记录
    def get_specified_records(self, tablename, *args):
        """
        :param tablename: 查询的表名
        :param args: 可变参数——查询的属性列
        :return: 数据库查询结果
        """
        # 根据表名以及属性列值进行数据库查询SQL语句生成
        query = f'''SELECT {','.join('`' + field + '`' for field in args)} 
		        FROM {'`' + tablename + '`'};'''
        return self.execute_query(query)

使用示例

querydb = QueryDB()
querydb.get_specified_records('tablename','field1','field2'...)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值