2023-04-13

分享一个python数据库操作pymysql的简单封装

import pymysql

class MyDatabase(object):
    def __init__(self, host, port, user, password, database, charset='utf8'):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.database = database
        self.charset = charset
        self._conn = None
        self._cursor = None

    def connect(self):
        self._conn = pymysql.connect(
            host=self.host,
            port=self.port,
            user=self.user,
            password=self.password,
            database=self.database,
            charset=self.charset)
        self._cursor = self._conn.cursor()

    def execute(self, sql, params=None, commit=True):
        if not self._cursor:
            self.connect()
        try:
            self._cursor.execute(sql, params)
            if commit:
                self._conn.commit()
        except:
            self._conn.rollback()
            raise

    def query_all(self, sql, params=None):
        if not self._cursor:
            self.connect()
        result = None
        try:
            self._cursor.execute(sql, params)
            result = self._cursor.fetchall()
        except:
            raise
        return result

    def query_one(self, sql, params=None):
        if not self._cursor:
            self.connect()
        result = None
        try:
            self._cursor.execute(sql, params)
            result = self._cursor.fetchone()
        except:
            raise
        return result

    def close(self):
        if self._cursor:
            self._cursor.close()
        if self._conn:
            self._conn.close()

在这个封装类中,我们使用了Pymysql库连接MySQL数据库。我们创建了一个MySQL类,该类的初始化方法init()接受MySQL连接的参数,包括host、port、user、password、database和charset。

实现了以下几个方法:

connect():连接到MySQL数据库。

execute():执行SQL查询或更新,支持传入参数,例如常规的查询或插入等操作。

query_all():查询多行数据,并将其一次性返回一个元组。

query_one():只查询一行数据并将这一行数据以元组的形式返回。

close():关闭连接。

我们可以通过创建MySQL类的实例,并使用execute()或query_all()等方法来执行SQL查询或更新。例如,下面的示例代码检查了一个用户是否存在:

mysql = MySQL('localhost', 3306, 'root', 'password', 'database')
sql = 'SELECT * FROM users WHERE username = %s'
params = ('john',)
result = mysql.query_all(sql, params)
if len(result) > 0:
print('用户已存在')
else:
print('可以创建用户')
mysql.close()
需要注意的是,在执行多条查询操作时,建议使用完query_all()方法后,使用close()方法关闭连接以释放资源。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • SQLAlchemy是一个基于Python的ORM框架。该框架是建立在DB-API之上,使用关系对象映射进行数据库...
    SkTj阅读 371评论 0 0
  • 一、pymsql pymsql 是 Python 中操作 MySQL 的原生模块,其使用方法和 MySQL 的SQ...
    奋斗的工程师1阅读 242评论 0 0
  • 总目录:https://www.jianshu.com/p/e406a9bc93a9 Python-后端 - 子目...
    寒暄_HX阅读 358评论 0 1
  • 元宇宙人事档案日常管理平台 企业人力资源管理过程中大部分文档存储在线下,整理起来依靠扫描等手段,如何实现线上...
    牵手到永远阅读 71评论 0 0
  • MySQL&python交互 一、Python操作MySQL步骤(原始的执行SQL语句) 引入pymysql模块 ...
    梦醒家先生阅读 721评论 0 0