目录
一、配置文件(ini&yaml)
1、作用
用来做软编码的,写死就叫硬编码
例如:
import requests
def login(user, password):
data = {"user": "admin", "password": "123456"} # 硬编码
# 从配置文件中取相应的参数
data = {"user": user, "password": password} # 软编码
res = requests.post(url="/login", json=data)
return res.json()
注:实际上在python自动化中这两种配置文件都是用不上的,因为相比较python文件来说。操作都比较复杂,但是因为服务端会用到,所以我们要了解
2、ini
A、语法
1、自己创建一个xxx.ini文件作为配置文件
2、内容格式如下
[user] # section
user_name = admin # key value
pass_word = 123456 # key value
[host] # section
host = www.baidu.com # key value
3、理解:可以理解成一个嵌套的字典 ,上述内容就等同于
{"user":{"user_name":"admin","pass_word":"123456"},
"host":{"host":"www.lenmon.com"}
}
}
B、特点
1、一个ini文件中的section不能重复
2、同一个section中的key不能重复
3、默认数据类型是字符串(就是不用加双引号也是字符串类型)
C、操作方法
1、获取section
# 导入所需要的类
from configparser import ConfigParser
# 实例化类
conf = ConfigParser()
# 因为这个类是继承RawConfigParser()类,read()方法是父类的方法,所以可以直接调用
# 这个是读到缓存中,是一个对象
conf.read(filenames="test.ini", encoding="utf-8")
# 获取所有的sections,返回list
res = conf.sections()
print(res)
# 输出结果:['user', 'host']
2、获取section下的key(接上述代码)
# 拿到sections下边的key,要使用准确的sections,返回list
# 获取”user“下边的key
k1 = conf.options(section="user")
print(k1)
# 输出结果:['user_name', 'pass_word']
3、获取key对应的value
# 获取key对应的value
# 获取user下边user_name的值
v1 = conf.get(section="user", option="user_name")
print(v1)
# 输出结果:admin
3、yaml
A、安装第三方库
pip install PyYAML
B、支持的数据类型
1、支持字典 通过": "来定义(注意那冒号后边有个空格)
如:key1: val1
2、支持列表 通过“- ” 来定义(注意那-后边有个空格)
如:- list1
- list2
C、特性
1、读取出来的是python对象
2、区分大小写的
3、通过缩进来表示层级关系(可以字典嵌套列表,可以字典嵌套字典)
4、如果是字典类型,同一级别的key不能重复
5、只要是左对齐,就认为是同一级别
6、文件中只能包含一种数据类型,同时存在多种数据类型会报错
7、通过# 注释
8、不支持列表嵌套列表
9、不支持一个一个读取,只能一次性读取全部
D、语法
# 创建test1.yaml
# 字典类型
key1: val1
key2: val2
key3: val3
# 创建test2.yaml
# 这个是列表类型
- list1
- list2
- list3
# 创建test3.yaml
# 这个是字典嵌套字典
key1: val1
key2: val2
key3:
key4: val4
key5: val5
# 这个是字典嵌套列表
# 创建test4.yaml
key:
- list1
- list2
E、数据读取
# 导入yaml
import yaml
# 读取文件
file = open(file="test4.yaml", encoding="utf-8")
# stream,传文件流
# Loader=yaml.FullLoader
# 读取所有内容
values = yaml.load(stream=file, Loader=yaml.FullLoader)
print(values)
# 输出:{'key': ['list1', 'list2']}
# 读取某一个具体数据
print(values["key"][0])
# 输出:list1
# 用完关闭
file.close()
注:我这里的数据读取是以test4为例的,感兴趣的同学可以自己输出其他文件看看。test1、test3、test4对外都是字典类型,可以放在一个文件中
二、数据库连接与pytho配置文件
1、安装数据库
pip install pymysql
2、数据库使用
# 导入库
import pymysql
# 创建连接
conn = pymysql.connect(host="192.168.1.X", # 数据库地址,这个是我本地的,同学们记得更换
port=3306,
user="root",
password="123456",
db="local", # 数据库名
charset="utf8",
autocommit=True, # 自动提交
# 游标
# 默认返回元组类型
# 设置返回为字典,字典嵌套在list中返回,一行数据为一个字典
cursorclass=pymysql.cursors.DictCursor
)
# 创建游标,可理解为Navicat中的一个新建查询页面
cur = conn.cursor()
# sql语句
sql = "select * from student "
# 执行sql语句
cur.execute(sql)
# 以下三种方法在执行时只能使用其中一条
# 1、取所有的执行结果
res = cur.fetchall()
print(res)
# 输出:[{'id': 1, 'name': '张三', 'age': 16}, {'id': 2, 'name': '李四', 'age': 18}, {'id': 3, 'name': '王五', 'age': 19}]
# 2、返回查询到的第一条数据
res = cur.fetchone()
print(res)
# 输出:{'id': 1, 'name': '张三', 'age': 16}
# 3、返回自定义数据条数(获取两条数据)
# 不传默认返回第一条
res = cur.fetchmany(2)
print(res)
# 输出结果:[{'id': 1, 'name': '张三', 'age': 16}, {'id': 2, 'name': '李四', 'age': 18}]
# 手动提交修改,修改的时候才需要提交
# 也可以在连接的时候设置自动提交
conn.commit()
# 关闭游标
cur.close()
# 用完关闭连接,可直接使用这个关闭
conn.close()
3、使用python配置文件进行数据库连接
A、首先在创建一个py文件,作为配置文件
# 测试数据库连接
mysql_info_test = {
"host": "192.168.1.6",
"port": 3306,
"user": "root",
"password": "123456",
"db": "local",
}
# 预发数据库连接
mysql_info_res = {
"host": "192.168.1.170",
"port": 13306,
"user": "root",
"password": "123456",
"db": "local",
}
B、使用配置文件中的测试数据库
import pymysql
# 从创建的setting文件中导入mysql_info_test对象
from setting import mysql_info_test
# 创建连接
# 可以直接使用导入的配置文件中的对象参数,根据对象的数据类型获取所需数据
conn = pymysql.connect(host=mysql_info_test["host"],
port=mysql_info_test["port"],
user=mysql_info_test["user"],
password=mysql_info_test["password"],
db=mysql_info_test["db"],
charset="utf8",
autocommit=True, # 自动提交
# 游标
# 默认返回元组类型
# 设置返回为字典,字典嵌套在list中返回,一行数据为一个字典
cursorclass=pymysql.cursors.DictCursor
)
# 创建游标,可理解为Navicat中的一个新建查询页面
cur = conn.cursor()
# sql语句
sql = "select * from student "
# 执行sql语句
cur.execute(sql)
# 取所有的执行结果
res = cur.fetchall()
print(res)
# 手动提交修改,修改的时候才需要提交
# 也可以在连接的时候设置自动提交
conn.commit()
# 关闭游标
cur.close()
# 用完关闭连接,可直接使用这个关闭
conn.close()
4、封装
import pymysql
from setting import mysql_info_test
# 创建一个类
class HandleMysql:
# 将数据库连接和创建游标写成实例属性,可以全局使用
# 将数据库的基本信息作为参数,因为实际应用中我们需要在不同的环境跑
def __init__(self, mysql_info):
self.conn = pymysql.connect(host=mysql_info["host"],
port=mysql_info["port"],
user=mysql_info["user"],
password=mysql_info["password"],
db=mysql_info["db"],
charset="utf8",
autocommit=True,
cursorclass=pymysql.cursors.DictCursor
)
self.cur = self.conn.cursor()
# 创建执行sql的方法,将sql语句作为参数
def get_data(self, sql):
self.cur.execute(sql)
res = self.cur.fetchall()
return res
# 创建连接关闭方法
def close_mysql(self):
self.cur.close()
self.conn.close()
if __name__ == '__main__':
sql = "select * from student where id =1 "
cl = HandleMysql(mysql_info_test)
res = cl.get_data(sql)
print(res)
cl.close_mysql()