python+pymysql+crud+上下文管理器

python中连接mysql数据库

一、安装pymysql

pip install pymysql

二、python文件中导入pymysql

import pymysql

三、连接数据库

conn = pymysql.connect(host="127.0.0.1",	# 数据库IP地址,必须传递
                       user="root",			# 用户名,必须传递
                       password="******",	# 密码,必须传递
                       port=3307,			# 端口,必须传递
                       database="test_01")	# 数据库名称,可以不传
  • 备注: 不传database时,执行的sql需写对应的数据库名
  • 作用:可同时操作多个数据执行sql
  • sql区别演示:
    不带库查询: select * from user
    带库查询:select * from test_01.user

四、建立游标

  • 游标的概念:游标是一种临时的数据库对象,可以用来存放在数据表中的数据行副本,也可以指向存储在 数据库中的数据行的指针。游标提供了在逐行的基础上操作表中数据的方法。
  • curs = conn.cursor()
  • 建立字典对象的游标
  • curs = conn.cursor(pymysql.cursors.DictCursor)

五、执行sql并获取结果

r = curs.execute("sql")
curs.fetchall() # 使用游标获取全部查询结果
r = curs.execute("insert into user (name, age) values ("zhangsan", 18)")
conn.commit() # 使用连接对象提交sql执行结果 = 保存数据

完整示例

import pymysql
from pprint import pprint

# 创建数据库连接
conn = pymysql.connect(host="127.0.0.1",
                       user="root",
                       password="******",
                       port=3307,
                       database="test_01")

# 实例一个游标,使用游标执行sql
curs = conn.cursor(pymysql.cursors.DictCursor)

# 使用游标执行sql
curs.execute("select * from user")
pprint(curs.fetchall())

六、关闭游标

curs.close() 

七 、关闭连接

conn,close()

示例代码

import pymysql

# 创建数据库连接
conn = pymysql.connect(host="127.0.0.1",user="root",password="******",port=3307,database="test_01")	# conn是连接数据库的对象

# 实例一个游标,使用游标执行sql
curs = conn.cursor(pymysql.cursors.DictCursor)

# 使用游标执行sql
curs.execute("select * from user")

conn.close()    # 关闭连接,无法操作数据库

八、pymysql常用封装

from pprint import pprint
import pymysql

class ApiMysql():

    def __enter__(self):
        self.conn = pymysql.connect(host="127.0.0.1",
                                    user="root",
                                    password="******",
                                    port=3307,
                                    database="test_01")
        self.curs = self.conn.cursor(pymysql.cursors.DictCursor)
        return self

    def crud_table(self,sql):	
        '''
        增删改方法
        :param sql: sql语句
        :return: 无
        '''
        self.curs.execute(sql)
        self.conn.commit()

    def retrieve_table(self,sql):
        '''
        查询方法
        :param sql: sql语句
        :return: 查询结果:列表嵌套字典或空列表
        '''
        self.curs.execute(sql)
        return self.curs.fetchall()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.curs.close()
        self.conn.close()    # 关闭连接

if __name__ == '__main__':
    with ApiMysql() as a:
        data = a.retrieve_table("select * from user")
    pprint(data)

十、读取配置文件连接数据库

  • 实际开发中,不会随便修改业务相关代码,关键的信息通过读取配置文件获取
  • 新建配置文件
# 新建的配置文件:db_info.py
database_info = dict(host="127.0.0.1",
                     user="root",
                     password="******",
                     port=3307,
                     database="test_01")
  • 读取配置文件(导包)
from db_info import database_info
  • 修改后的代码
import pymysql

from db_info import database_info

class ApiMysql():

    def __enter__(self):
        self.conn = pymysql.connect(**database_info)	# 使用**进行字典拆包
        self.curs = self.conn.cursor(pymysql.cursors.DictCursor)
        return self

    def crud_table(self,sql_list):
        '''
        增删改方法
        :param sql: sql语句列表
        :return: 无
        '''
        for sql in sql_list:
            self.curs.execute(sql)

    def retrieve_table(self,sql):
        '''
        查询方法
        :param sql: sql语句
        :return: 查询结果:列表嵌套字典或空列表
        '''
        self.curs.execute(sql)
        return self.curs.fetchall()

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.curs.close()	 # 关闭游标
        self.conn.close()    # 关闭连接

if __name__ == '__main__':
    with ApiMysql() as a:
        data = a.retrieve_table("select * from user")
        a.conn.commit() # 使用实例对象a调用commit()方法提交
  • 作用:当切换数据库环境时,无需修改代码,只需要修改配置文件即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值