'''
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