Как исправить ошибку object is not subscriptable?

Мне надо написать имитацию БД для банковской системы, при обычных тестах через вызов функции из файла - все работает, но при юнит тестах выдаёт:

2024-06-13 14:00:20,361 - root - ERROR - Error: 'sqlite3.Connection' object is not subscriptable

В чем может быть загвоздка, и что нужно исправить?

Часть кода с тестами.

class TestBank(unittest.TestCase):

    @classmethod
    def setUpClass(cls):
        cls.conn = sqlite3.connect(':memory:')
        cls.cursor = cls.conn.cursor()
        create_database(cls.conn)

    @classmethod
    def tearDownClass(cls):
        cls.conn.close()

    def test_add_user(self):
        result = add_user(self.conn, {'name': 'Jo', 'surname': 'Do', 'birth_day': '1990-01-01', 'accounts': ''})
        self.assertEqual(result['status'], 'success')

    def test_add_bank(self):
        result = add_bank(self.conn, {'name': 'Bank A', 'capital': 1000000})
        self.assertEqual(result['status'], 'success')  

Часть кода с инициализацией БД

def create_database(conn):
    unique_name_surname_input = input("Should name and surname be unique? (yes/no): ").strip().lower()

    if unique_name_surname_input in ['yes', 'y']:
        unique_name_surname = True
    elif unique_name_surname_input in ['no', 'n']:
        unique_name_surname = False
    else:
        print("Invalid input. Please enter 'yes' or 'no'.")
        create_database()
    try:
        logging.info(f"Creating database with unique_name_surname={unique_name_surname}")
        cursor = conn.cursor()

        try:
            cursor.execute('''
                CREATE TABLE IF NOT EXISTS Bank (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT NOT NULL UNIQUE,
                    capital REAL DEFAULT 0.0
                )
            ''')
            logging.info("Banks table created")
        except sqlite3.Error as e:
            logging.error(f"Error creating Banks table: {e}")
        try:
            user_table_creation_query = '''
                CREATE TABLE IF NOT EXISTS User (
                    id INTEGER PRIMARY KEY AUTOINCREMENT,
                    name TEXT NOT NULL,
                    surname TEXT NOT NULL,
                    birth_day TEXT,
                    accounts TEXT NOT NULL
                '''
            if unique_name_surname:
                user_table_creation_query += ', UNIQUE (name, surname)'
                logging.info("+UNIQUE")
            user_table_creation_query += ')'

            cursor.execute(user_table_creation_query)
            logging.info("User table created")
        except sqlite3.Error as e:
            logging.error(f"Error creating User table: {e}")

Часть кода с функциями для тестов.

@db_connection
def add_user(conn, *users):
    cursor = conn.cursor()
    for user in users:
        name, surname = split_user_name_surname(user['user_full_name'])
        validate_field_value(name, 'name')
        validate_field_value(surname, 'surname')
        accounts = user.get('accounts', '')
        birth_day = user.get('birth_day', '')
        try:
            cursor.execute('INSERT INTO User (name, surname, birth_day, accounts) VALUES (?, ?, ?, ?)',
                           (name, surname, birth_day, accounts))
        except sqlite3.IntegrityError as e:
            logger.error(f"Error: {str(e)}")
            return {"status": "failure", "message": str(e)}
    return {"status": "success", "message": "User(s) added successfully"}



@db_connection
def add_bank(conn, *banks):
    cursor = conn.cursor()
    for bank in banks:
        try:
            cursor.execute('INSERT INTO Bank (name, capital) VALUES (?, ?)', (bank['name'], bank['capital']))
        except sqlite3.IntegrityError as e:
            logger.error(f"Error: {str(e)}")
            return {"status": "failure", "message": str(e)}
    return {"status": "success", "message": "Bank(s) added successfully"}
    

Сама БД с таблицами создается, но потом ничего не добавляется в неё, хотя должен добавиться юзер и банк в соответствующие таблицы.

На что стоит обратить внимание ?


Ответы (0 шт):