PyMysql库实现数据库操作

'''
PyMysql库实现数据库操作
PyMysql环境部署:
pymysql是python中操作mysql数据库的第三方库所以需要进行pip安装
    1.启动cmd
    2.输入指令pip install pymysql,如有需要可以加载国内源
    3.需要提前安装mysql数据库
PyMysql操作数据库
    主要用于操作mysql数据库调用的第三方库。如果要操作其他数据库,可以百度搜索对应的第三方包。
    数据库是日常工作最常见的一个组件的操作。基本上都是基于查询功能来实现对数据库的使用。
    也是日常提供测试数据的一种重要手段。也就是所谓的数据库数据驱动形态。

pymysql实现对mysql数据库的操作行为:
    1.查询
    2.增删改
pymysql实现操作的流程:
    1.连接数据库。
    2.创建游标。
    3.数据库操作:
        1.查询
        2.增删改
'''
import pymysql

from class11_mysql.read_conf import read

# 连接数据库
# 数据库配置信息
# db_info = {
#     'host': '127.0.0.1',
#     'port': 3306,
#     'user': 'root',
#     'password': '123456',
#     'database': 'test_db'
# }

# 基于配置信息连接到数据库
conn = pymysql.connect(**read('TEST_ENV'))

# 创建游标
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 将数据结果基于字典的格式进行返回

# 数据库相关操作
# ln = input('请输入last name:')
# 查询
sql = 'select * from students'  #定义sql语句
# sql = f'select * from students where last_name="{ln}"'  #不推荐此写法,因为不安全
# sql = f'select * from students where last_name=%s'  # 推荐写法

# sql注入:输入" or 1=1#,执行select * from students where last_name = "" or 1=1#"
# 调用pymysql实现对sql语句的执行
cursor.execute(sql)#执行sql语句
# cursor.execute(sql,(ln))  # 执行sql语句。在占位符%s处填入ln的值
# 获取sql语句执行后的数据结果
results = cursor.fetchall()   #获取所有数据结果,以list类型返回,每一个元素是一个字典
# results = cursor.fetchmany(3)     #获取指定条数,保存为list格式
# results = cursor.fetchone()  # 返回一条记录,字典格式。类似于readline,也属于迭代器。一次返回一条,下一次返回下一条。
print(results)
# results = cursor.fetchone()
# print(results)

# 游标的操作
# 1.游标的前移
# cursor.scroll(1, 'relative')  # 基于当前游标向下滚动1行,relative是默认模式
# cursor.scroll(1, 'absolute')  # 基于第一行向下滚动指定行数
# 2.游标的后移
# cursor.scroll(-1)
# results = cursor.fetchone()  # 基于当前游标向上滚动1行
# print(results)

# 增删改
# try:
#     sql = 'update students set last_name = "test" where last_name = "Doe"'
#     cursor.execute(sql)
#     conn.commit()  # 二次确认sql的修改行为
# except:
#     conn.rollback()  # 回滚操作,撤销之前的操作行为
# finally:
    # 数据库在操作结束之后一定要释放资源,关闭数据库连接
cursor.close()  # 游标关闭
conn.close()  # 数据库连接关闭
'''
读取数据相关配置信息
'''
import pathlib

import configparser


def read(env):
    file = pathlib.Path(__file__).parents[0].resolve() / 'mysql_conf.ini'
    conf = configparser.ConfigParser()
    conf.read(file)
    values = dict(conf.items(env))
    #处理port不为int类型的代码逻辑
    for key,value in values.items():
        if key == 'port':
            values[key]=int(values[key]) #values['port']也就是3306
    return values
[TEST_ENV]
HOST = 127.0.0.1
PORT = 3306
USER = root
PASSWORD = 123456
DATABASE = test_db
[DEV_ENV]
HOST = www.baidu.com
PORT = 33
USER = root1
PASSWORD = root2
DATABASE = students

 

posted @ 2024-12-10 22:25  mafei666  阅读(43)  评论(0)    收藏  举报