Не удается получить доступ к индексу кортежа. IndexError: список индексов вне диапазона - PullRequest
0 голосов
/ 10 января 2020

Я создал базу данных с sqlite3 в python, затем я добавил таблицу с 5 параметрами. Я добавил запись в таблицу, заполнив все 5 параметров. Я пытаюсь выбрать все записи с указанным c параметром 'user'.

Если я печатаю выбранный кортеж без индекса, он возвращает кортеж с 5 параметрами , как ожидается,

Если я печатаю кортеж с индексом [0], он возвращает кортеж с 5 параметрами вместо только первого параметра.

Если я печатаю запись с индексом выше [0], например [1], возвращается IndexError: список индекса выходит за пределы диапазона.

Я хотел бы получить доступ ко всем индексам, но я не знаю, как это сделать, кроме как я пытался.

Код ниже: (financedb - мой другой файл .py, который содержит функцию db_connect(), подключающуюся к базе данных. Я включил эту функцию в код ниже, чтобы код было легче копировать.)

import sqlite3
import financedb as fdb

user_name_input = input('Username: ')


def check_the_balance():

    fdb.db_connect() # Establishes connection to DB

    fdb.cursor.execute('SELECT * FROM test WHERE user=?', [user_name_input])
    check = fdb.cursor.fetchall()
    print(check[0])

def db_connect():

    global connection 
    global cursor 

    cursor = connection.cursor()
    command = f'CREATE TABLE test(id integer, user text, password text, montly_income real, monthly_debt real)'

    try:
        cursor.execute(command)

    except sqlite3.OperationalError:
        pass

    finally:
        connection.commit()
check_the_balance()  

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я полагаю, fetchall вернет список строк, поэтому check[0] представляет первую строку, из которых первый элемент - это тот, который вы ищете. Он также может вернуть пустой список, но я бы проверил, является ли его длина положительной, прежде чем получить доступ к первому значению

1 голос
/ 10 января 2020

.fetchall возвращает список строк, поэтому я предполагаю, что вы хотите check[0][0]? Это может дать вам то, что вы хотите:

def check_the_balance():

    fdb.db_connect() # Establishes connection to DB

    fdb.cursor.execute('SELECT * FROM test WHERE user=?', [user_name_input])
    for items in fdb.cursor.fetchall():
        print(items)
        print(items[0])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...