# -*-coding:utf-8 -*- #
# ---------------------------------------------------------------------------
# ProjectName:   test_58
# FileName:      db.py
# Author:       xxxxxxx
# Datetime:     2024/1/4 9:53
# Description:
# 
# ---------------------------------------------------------------------------
import pymysql

from InterfaceAutoTest.common.read_ini import ReadIni
from InterfaceAutoTest.data_config.settings import *


class DB:
    def __init__(self):
        """链接数据库，获取链接对象，并创建游标对象"""
        # 创建ReadIni的对象，因为后面需要调用get_sql_connect_msg获取数据库的链接信息
        read_ini = ReadIni()
        try:
            # 链接数据库, 获取链接对象
            self.conn = pymysql.connect(
                host=read_ini.get_sql_connect_msg(SQL_HOST),
                port=int(read_ini.get_sql_connect_msg(SQL_PORT)),
                user=read_ini.get_sql_connect_msg(SQL_USER),
                password=read_ini.get_sql_connect_msg(SQL_PASSWORD),
                database=read_ini.get_sql_connect_msg(SQL_DATABASE),
                charset="utf8"
            )
        except:
            raise ConnectionError("链接数据库出错，请查看配置文件是否配置正确")
        else:
            # 获取游标对象
            self.cursor = self.conn.cursor()

    def close(self):
        """关闭数据的链接"""
        self.cursor.close()
        self.conn.close()

    def delete(self, sql_sentence):
        """执行删除的sql语句"""
        try:
            # 使用游标对象执行删除的sql语句
            self.cursor.execute(sql_sentence)
        except:
            raise ValueError("请察看sql语句是否正确")
        else:
            # 使用链接对象提交
            self.conn.commit()

    def select(self, sql_sentence):
        """执行查询的sql语句，并返回查询的结果，如果没有查询结果返回None"""
        try:
            # 使用游标对象执行查询的sql语句
            self.cursor.execute(sql_sentence)
        except:
            raise ValueError("请察看sql语句是否正确")
        else:
            # 接收查询的结果
            select_result = self.cursor.fetchall()
            # 判断查询的结果是否为空的元组，如果是返回None，如果不是返回查询的第一个值
            if select_result:
                return select_result[0][0]