Python 单例模式操作数据库

Python 操作数据库

1.PyMySQL介绍

PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库

2.pymysql大概使用流程

- 导入pymysql
- 连接数据库
- 创建游标对象
- 通过游标对象执行SQL语句
- 获取查询结果
- 关闭连接
  • 连接数据库注意事项:
    • 有一个MySQL数据库,并且已经启动
    • 有可以连接数据库的用户名和密码
    • 有一个存在且有操作权限的数据库(database)

3.安装pymysql模块

  • 在终端窗口(cmd)输入:
	pip install pymysql

4.引入模块

  • 在python中引入pymysql模块
	from pymysql import *

5. Connection对象

  • 作用 : 与数据库建立连接
  • 创建对象:调用connect()方法
  • 创建对象,一般用db接收数据,当然 用别的参数接收也可以,毕竟只是个变量,只不过大多用db接收
  • connect()方法,需要传入6个参数
	db=connect(host='',port='',user='',password='',database='',charset='')
- host:指IP地址 ,如果是本机的话可以是localhost 或 127.0.0.1
- port:代表端口号,如没有更改,默认是3306
- user:数据库的用户名
- password:数据库密码
- database:要操作的数据库名称
- charset:编码方式,一般为utf8
  • 对象方法
    • cursor():返回Cursor对象,用于执行sql语句并获得结果
    • close():用于关闭连接
    • commit:用于提交

6.Cursor对象

  • 作用:用于执行sql语句,使用频度最高的语句为select、insert、update、delete
  • 获取Cursor对象:调用Connection对象的cursor()方法
  • cursor 也称游标对象,通常用cs接收
	cs=db.cursor()
  • 对象的方法
    • execute(operation [, parameters ]):执行语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句

    • fetchone():获取查询结果集的第一个行数据,返回一个元组,通俗的说就是获取一条查询结果

    • fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回,通俗的说就是获取全部查询结果

    • close():关闭连接

  • 对象属性
    • rowcount只读属性,表示最近一次execute()执行后受影响的行数
    • connection获得当前连接对象

7.关闭连接

  • 7.1 先关游标对象
    • cs.close()
  • 7.2 后关连接对象
    • db.close()

可以参考下面的Demo

Demo1单例模式
import pymysql,os
# os:为系统模块,目的为正常退出
# __init__ : 初始化属性
# __del__ : 销毁对象时,自动执行该方法
# __new__ : 实例化对象(创建一个对象)
class connmysql(object):
    obj = None   #对象第一次为None
    def __new__(cls, *args, **kwargs): #单例模式
        if cls.obj is None:     #如果对象为None
            cls.obj = super().__new__(cls)  # 就创建一个对象

        return cls.obj  #否则直接返回
    def __init__(self,user,password,database,host="localhost",port=3306):
        # 1. 链接数据库, 得到一个对象
        try:
            self.db=pymysql.connect(
                host=host, port=port, user=user,  # 第一种
                password=password, database=database, charset="utf8"
            )
        except Ellipsis as e:
            print(e)
            os._exit(0)   # 如果第一步的链接失败,下面的所有代码都不用走,直接退出

        self.cs=self.db.cursor()   #2.得到一个游标对象

    def cha(self,sql):
        """负责查询功能"""
        #3 执行SQL语句
        try:

            self.cs.execute(sql)
        except Exception as e:
            print(e)
            return
        #4.获取查询结果
        r=self.cs.fetchall()
        return r    #将结果返回
    def update(self,sql):
        """负责更行功能"""
        # 3 利用游标对象执行SQL语句
        try:
            self.cs.execute(sql)
        except Exception as e:
            print(e)
            return
        #4.提交 如果不进行提交,所有的改变(insert, delete, update)不会生效
        self.db.commit()
        print("更新成功!")


    def __del__(self):
        self.cs.close()  # 5. 关闭链接
        self.db.close()

a=connmysql(user="root",password="mysql",database="jingdong")
c=a.cha(sql=input("输入sql语句:"))
print(c)

a.update(sql=input('更新内容:'))
Demo2函数封装,查询
from pymysql import *
def select():
    db = connect(host="127.0.0.1", port=3306, user="root",
                 password="mysql", database="school", charset="utf8")

    # 2.创建游标对象
    cs = db.cursor()

    # 3.利用游标对象执行sql语句
    cs.execute("select * from students")

    # 4. 获取查询结果
    r=cs.fetchall()
    return r

    # 5.关闭
    cs.close()
    db.close()
r=select()
Demo 2.1函数封装,改变数据库(增,删,改)
from pymysql import *
def select():
    db = connect(host="127.0.0.1", port=3306, user="root",
                 password="mysql", database="cs", charset="utf8")

    # 2.创建游标对象
    cs = db.cursor()

    # 3.利用游标对象执行sql语句
    cs.execute("insert into books values(0,'《神厨小福贵》',30,500)")

    # 4. 使用链接对象db提交改变, 如果不进行提交,所有的改变(insert, delete, update)不会生效
    db.commit()
    # 5.关闭
    cs.close()
    db.close()	
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单例模式中,一个类只允许创建一个对象。在数据库连接中,我们希望只有一个连接,因此可以使用单例模式来实现。 以下是一个简单的数据库连接类的单例模式实现: ```python class DatabaseConnection: __instance = None @staticmethod def get_instance(): if DatabaseConnection.__instance is None: DatabaseConnection() return DatabaseConnection.__instance def __init__(self): if DatabaseConnection.__instance is not None: raise Exception("Only one instance of DatabaseConnection is allowed") else: DatabaseConnection.__instance = self # 连接数据库的代码 self.db = None try: self.db = mysql.connector.connect( host="localhost", user="yourusername", passwd="yourpassword", database="yourdatabase" ) print("Database connection successful") except mysql.connector.Error as err: print(f"Error: {err}") exit() def close_connection(self): self.db.close() print("Database connection closed") # 使用方式 db_connection = DatabaseConnection.get_instance() # 这个对象就是我们的数据库连接对象 ``` 在上述代码中,我们定义了一个名为 `DatabaseConnection` 的类,它只允许创建一个对象。我们使用了一个静态方法 `get_instance()` 来获取这个对象。如果对象不存在,则创建一个新的对象并返回它。如果对象已经存在,则直接返回它。 在 `__init__()` 方法中,我们连接了数据库,并将连接对象保存在 `self.db` 中。我们还定义了一个 `close_connection()` 方法来关闭数据库连接。 最后,我们可以使用 `DatabaseConnection.get_instance()` 方法获取我们的数据库连接对象,并使用它来执行数据库操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值