Как исправить ошибку 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"}
Сама БД с таблицами создается, но потом ничего не добавляется в неё, хотя должен добавиться юзер и банк в соответствующие таблицы.
На что стоит обратить внимание ?