Error: 'int' object is not subscriptable

В БД есть записи: id bigint и type jsonb.

Делаю запрос к БД, получаю строки, типа:

1234, {'a': [12, 54, 34], 'b': [23, 45]}
1235, {'a':[23], 'b':[25]}
1236, {'a':[54, 15, 33], 'b':[22, 11]}

Мне нужно узнать, есть ли число Х в массиве а, и если есть удалить это число.

sqlGetData = 'SELECT id, type FROM data WHERE own = :p_ownid'
sqlUpdateData = 'UPDATE data SET type = :p_type ::jsonb WHERE (own = :p_ownid AND id = :p_id)'

own_id = 1
x = 54
dbcon = Session()
dataBD = dbcon.execute(sqlGetData, {'p_ownid': own_id}).fetchall()

for data in dataBD:
   id = data.id
   newTypeA = [i for i in data.type['a'] if i != x]
   dataNew = {'a': newTypeA, 'b': data.type['b']}
   if data.type['a'].count(x) > 0 :
       dbcon.execute(sqlUpdateData, {'p_ownid': own_id, 'p_id': id, 'p_type': json.dumps(dataNew)})

Во время выполнения данного запроса получаю ошибку:

"error": "'int' object is not subscriptable"

Python ссылается на то, что data.type['a'] у меня не массив из чисел, а просто число, то там ведь [12, 54, 34]???

Делаю проверку типа переменной type(data.type['a']), получаю class 'list'.


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

Автор решения: Hany

Если попробовать просто в питоновском файле то всё работает.

x = 54

typel = {'a': [12, 54, 34], 'b': [23, 45]}
newTypeA = [i for i in typel['a'] if i != x]
dataNew = {'a': newTypeA, 'b': type1['b']}
if typel['a'].count(x) > 0 :
    print('no')

Может из БД приходит другой тип данных?

→ Ссылка