python代码出现keyError

问题遇到的现象和发生背景

数据库:

img

问题相关代码,请勿粘贴截图

项目:1、key_demo——2、key_demo/cases|tool——3、cases/case.py|tool/MyDB.py
1.key_demo——2.key_demo/config——3、key_demo/config/dbconfig.conf

MyDB.py

# -*- coding: utf-8 -*-
# @Author  : hxy
# @Time    : 2022/1/18 15:20
# @Function:
import pymysql

import configparser


class my_db:
    '''
    动作类:获取数据连接,连接ip,端口,账号密码。。
    '''

    # 构造函数
    def __init__(self, config_file, db):
        # 实例化configparser
        config = configparser.ConfigParser()
        # 从配置文件中读取数据库相关信息
        config.read(config_file)
        host = config[db]['host']
        port = int(config[db]['port'])
        user = config[db]['user']
        password = config[db]['password']
        database = config[db]['database']
        charset = config[db]['charset']
        try:
            self.dbconn = pymysql.connect(host, port, user, password, database, charset)
        except Exception as e:
            print('初始化数据库连接失败:%s' % e)

    def close(self):
        self.dbconn.close()

    # query=查询语句
    def select_record(self, query):
        # 查询数据
        print('query:%s' % query)
        try:
            # 建立游标
            db_cursor = self.dbconn.cursor()
            db_cursor.execute(query)
            result = db_cursor.fetchall()
            return result
        except Exception as e:
            print('数据库查询数据失败:%s' % e)
            db_cursor.close()
            exit()

    # 插入
    def execute_insert(self, query):
        print('query:%s' % query)
        try:
            # 建立游标
            db_cursor = self.dbconn.cursor()
            db_cursor.execute(query)
            db_cursor.execute('commit')
            return True
        except Exception as e:
            print('数据库插入数据失败:%s' % e)
            # 事务回滚
            db_cursor.execute('rollback')
            db_cursor.close()
            exit()


dbconfig.conf

#测试环境
[TESTDB]
host=127.0.0.1
port=3306
user=root
password=root
db=test_cases
charset=utf8

[DEVDB]
host=192.168.1.2
port=3306
user=root
password=root
db=test_cases1
charset=utf8

#生产环境
[prdDB]
host=192.168.1.4
port=3306
user=root
password=root
db=test_cases2
charset=utf8


cases.py

# -*- coding: utf-8 -*-
# @Author  : hxy
# @Time    : 2022/1/7 15:07
# @Function:
# 针对数据库中的数据做数据驱动
import time
import unittest
from ddt import ddt, data, unpack

from key_demo.tool.MyDB import my_db

# 必须要实例化,不然会报TypeError: select_record() missing 1 required positional argument: 'query'
# testdb = my_db('key_demo/config/dbconfig.conf','TESTDB')
config_file='key_demo/config/dbconfig.conf'
db='TESTDB'
testdb=my_db(config_file,db)
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


@ddt
class case(unittest.TestCase):
    # @data(*my_db().select_record('select weaid,success from weather'))
    @data(testdb.execute_insert('insert into weather(weaid,success,cre_time)values("2","2","%s")' % now))
    # @unpack
    def test_1(self, t):
        print(t)
        res = testdb.select_record('select weaid,success from weather')
        print(res)


if __name__ == '__main__':
    unittest.main()


运行结果及报错内容
C:\Users\mihxy\PycharmProjects\venv\Scripts\python.exe "C:\destination\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py" --path C:/Users/mihxy/PycharmProjects/key_demo/cases/case.py
Testing started at 11:07 ...
Launching unittests with arguments python -m unittest C:/Users/mihxy/PycharmProjects/key_demo/cases/case.py in C:\Users\mihxy\PycharmProjects\key_demo\cases

Traceback (most recent call last):
  File "C:\destination\PyCharm Community Edition 2021.1.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py", line 35, in <module>
    sys.exit(main(argv=args, module=None, testRunner=unittestpy.TeamcityTestRunner, buffer=not JB_DISABLE_BUFFERING))
  File "C:\destination\Python\lib\unittest\main.py", line 100, in __init__
    self.parseArgs(argv)
  File "C:\destination\Python\lib\unittest\main.py", line 147, in parseArgs
    self.createTests()
  File "C:\destination\Python\lib\unittest\main.py", line 158, in createTests
    self.test = self.testLoader.loadTestsFromNames(self.testNames,
  File "C:\destination\Python\lib\unittest\loader.py", line 220, in loadTestsFromNames
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "C:\destination\Python\lib\unittest\loader.py", line 220, in <listcomp>
    suites = [self.loadTestsFromName(name, module) for name in names]
  File "C:\destination\Python\lib\unittest\loader.py", line 154, in loadTestsFromName
    module = __import__(module_name)
  File "C:\Users\mihxy\PycharmProjects\key_demo\cases\case.py", line 16, in <module>
    testdb=my_db(config_file,db)
  File "C:\Users\mihxy\PycharmProjects\key_demo\tool\MyDB.py", line 21, in __init__
    host = config[db]['host']
  File "C:\destination\Python\lib\configparser.py", line 960, in __getitem__
    raise KeyError(key)
KeyError: 'TESTDB'

Process finished with exit code 1

Empty suite


我的解答思路和尝试过的方法

错误发生代码:

config_file='key_demo/config/dbconfig.conf'
db='TESTDB'
testdb=my_db(config_file,db)

新建conf配置文件时,报过提醒说要安装INTELL IDE插件,但是我直接点击了忽略
如果是这个原因导致的,方便告知我解决方案

--分割线————
MyDB.py文件,运行打印不了数据

img

我想要达到的结果

我感觉是读 config 文件出了问题

img

你直接跑下代码 , 看 dbconfig.conf 文件读取是否正常。 我保存的是utf8 格式,所以加了 encoding

import configparser
config = configparser.ConfigParser()
# 从配置文件中读取数据库相关信息
config.read("dbconfig.conf",encoding='utf-8')
print(config['TESTDB']['host'])

img

你的配置文件读取不正确,参考:

如有帮助,请采纳