【发布时间】:2020-01-10 16:30:47
【问题描述】:
我在 python 中使用 sqlite3 创建了一个数据库,然后添加了一个包含 5 个参数的表。我在表格中添加了一个条目,填充了所有 5 个参数。我正在尝试选择具有特定参数“用户”的所有条目。
如果我打印没有索引的选定元组,它会返回一个包含 5 个参数的元组如预期的那样。
如果我打印索引为 [0] 的元组,它会返回一个包含 5 个参数的元组而不仅仅是第一个参数。
如果我打印索引高于 [0] 的条目,例如 [1],它会返回 IndexError: list index out of range。
我想访问所有索引,但除了我尝试过的方法之外,我不知道该怎么做。
下面的代码:(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()
【问题讨论】:
-
你确定你的查询返回了一些东西,即有
user等于参数user_name_input的记录吗? -
@GMB 简单的答案 - 是的。更长的答案 - 在
user_name_input之后,如果我查询数据库中的用户,我会收到分配给该用户的 5 个参数的整行。这包括特定的 ID、用户、密码和其他两个 FLOATS。 -
一个好的做法是明确地写出你想要选择的字段(如果是这样的话,甚至是所有的字段)。如果您移动一列、在中间添加一列或删除一列,这将强制执行顺序并防止您的代码中断