Может кто-нибудь, пожалуйста, помогите мне понять, что возвращает эта строка db.execute
? В базах данных он возвращает строки, но когда мы назначаем этот db.execute
переменной Python, что он возвращает на самом деле? Я пытался рассматривать результат как список, а также как словарь, но оба они сбивают с толку. Когда я пытаюсь извлечь данные в виде списка, я получаю ошибку словаря, а когда я пытаюсь извлечь данные в виде списка, я получаю ошибки списка, так как я могу манипулировать переменной cash
? ТИА
версия списка:
cash_list = db.execute("SELECT cash FROM users WHERE username = ?", owner_id)
cash = cash_list[0][0]
if cash < total:
return apology("don't have enough cash")
else:
left = cash - total
db.execute("UPDATE users SET cash = ?", left)
ошибка компилятора версии списка:
File "/home/ubuntu/pset8/finance/helpers.py", line 34, in decorated_function
return f(*args, **kwargs)
File "/home/ubuntu/pset8/finance/application.py", line 85, in buy
cash = cash_list[0][0]
KeyError: 0
словарная версия:
cash_dict = db.execute("SELECT cash FROM users WHERE username = ?", owner_id)
cash = cash_dict["cash"]
if cash < total:
return apology("don't have enough cash")
else:
left = cash - total
db.execute("UPDATE users SET cash = ?", left)
ошибка компилятора версии словаря:
File "/home/ubuntu/pset8/finance/helpers.py", line 34, in decorated_function
return f(*args, **kwargs)
File "/home/ubuntu/pset8/finance/application.py", line 85, in buy
last_cash = cash_dict["cash"]
TypeError: list indices must be integers or slices, not str
Согласно документации sqlite3execute
возвращает объект Cursor
. Попробуйте использовать Cursor().fetchall()
для получения всех (оставшихся) строк результата запроса в формате списка.
@SandrinJoy извините, но не смог этого сделать, потому что программа выдает ошибку после инициализации cash
, поэтому она не выполняется
@cetins, почему вам нужно инициализировать наличные? я спрашиваю о cash_dict . поместите его после строки 1. и выполните
@SandrinJoy извините, я не инициализировал наличные, я написал строку следующим образом: cash_dict = db.execute («ВЫБЕРИТЕ наличные деньги ОТ пользователей, ГДЕ имя пользователя = ?», owner_id) x = len (cash_dict)
@SandrinJoy затем я попытался найти способ увидеть это значение на странице, но оно не распечатывается. Я пытался сделать это до сих пор не мог понять :/
@SandrinJoy хорошо, наконец, я понял, длина 1
теперь выполните print(cash_dict) после строки 1 и сообщите o/p
@SandrinJoy [{'cash': 10000}] так это словарь в списке?
Да, в терминах Python это можно назвать dict. Но я думаю, что это данные в формате json. Если вы прочитаете комментарии, вы увидите, как я выполнял отладку. Вы можете попробовать такие шаги всякий раз, когда вы получаете какую-то переменную ошибку
@SandrinJoy Я пытался манипулировать данными как словарем в списке и, наконец, смог выполнить без ошибок. Искренне спасибо, не только за решение, но и за настрой!!
Здесь я снова даю решение, чтобы сделать этот вопрос решенным.
cash = cash_list[0]['cash']
Это дает вам o/p, который вы искали.
Например, если возвращаемые данные [{'cash':10000}]
, то cash_list[0]['cash']
дает значение 10000
можете ли вы выполнить len(cash_dict) и сказать, каков ваш вывод