Какой тип данных sqlite3 select возвращает в python?

Может кто-нибудь, пожалуйста, помогите мне понять, что возвращает эта строка 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

можете ли вы выполнить len(cash_dict) и сказать, каков ваш вывод

Sandrin Joy 11.12.2020 13:33

Согласно документации sqlite3execute возвращает объект Cursor. Попробуйте использовать Cursor().fetchall() для получения всех (оставшихся) строк результата запроса в формате списка.

angelogro 11.12.2020 13:38

@SandrinJoy извините, но не смог этого сделать, потому что программа выдает ошибку после инициализации cash, поэтому она не выполняется

cetins 11.12.2020 13:41

@cetins, почему вам нужно инициализировать наличные? я спрашиваю о cash_dict . поместите его после строки 1. и выполните

Sandrin Joy 11.12.2020 13:44

@SandrinJoy извините, я не инициализировал наличные, я написал строку следующим образом: cash_dict = db.execute («ВЫБЕРИТЕ наличные деньги ОТ пользователей, ГДЕ имя пользователя = ?», owner_id) x = len (cash_dict)

cetins 11.12.2020 13:59

@SandrinJoy затем я попытался найти способ увидеть это значение на странице, но оно не распечатывается. Я пытался сделать это до сих пор не мог понять :/

cetins 11.12.2020 14:00

@SandrinJoy хорошо, наконец, я понял, длина 1

cetins 11.12.2020 14:05

теперь выполните print(cash_dict) после строки 1 и сообщите o/p

Sandrin Joy 11.12.2020 14:06

@SandrinJoy [{'cash': 10000}] так это словарь в списке?

cetins 11.12.2020 14:08

Да, в терминах Python это можно назвать dict. Но я думаю, что это данные в формате json. Если вы прочитаете комментарии, вы увидите, как я выполнял отладку. Вы можете попробовать такие шаги всякий раз, когда вы получаете какую-то переменную ошибку

Sandrin Joy 11.12.2020 14:15

@SandrinJoy Я пытался манипулировать данными как словарем в списке и, наконец, смог выполнить без ошибок. Искренне спасибо, не только за решение, но и за настрой!!

cetins 11.12.2020 14:19
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
11
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь я снова даю решение, чтобы сделать этот вопрос решенным.

 cash = cash_list[0]['cash']

Это дает вам o/p, который вы искали.

Например, если возвращаемые данные [{'cash':10000}], то cash_list[0]['cash'] дает значение 10000

Другие вопросы по теме