(5)py接口自动化之配置文件&数据库连接详解

本文介绍了Python中配置文件的使用,包括ini和yaml格式,解析了它们的语法、特点及操作方法。同时,讲解了数据库连接,特别是使用Python配置文件进行数据库连接的方式,并展示了如何封装数据库操作。
摘要由CSDN通过智能技术生成

目录

一、配置文件(ini&yaml)

1、作用

2、ini

        A、语法

         B、特点

        C、操作方法

3、yaml

        A、安装第三方库

        B、支持的数据类型

        C、特性

        D、语法

        E、数据读取

二、数据库连接与pytho配置文件

1、安装数据库

2、数据库使用

3、使用python配置文件进行数据库连接

4、封装

一、配置文件(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()

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值