【问题标题】:Iterate through SQLite DB Tuples not matching user input遍历与用户输入不匹配的 SQLite DB 元组
【发布时间】:2020-08-05 14:59:58
【问题描述】:

我有一个小型数据库,其中包含一个名为 cards 的表。

  • number 列是TEXT
  • 我有多行,我试图让用户输入马赫

例如:

    connection = sqlite3.connect('card.s3db')
    cursor = connection.cursor()

    card_check = cursor.execute('SELECT number FROM card')

    connection.commit()

    prompt_card_number = input("Enter your card number:\n")

    for number in card_check:
        if number == prompt_card_number:
            check_stage2()
    else:
        print("\nWrong card number or PIN!")

    connection.close()

由于某种原因,我在数据库中输入了匹配的卡号,但我仍然得到Wrong card number or PIN!,我无法通过check_stage2()。 我做错了什么?

编辑:好的,所以我现在尝试了这段代码:

def check_stage1():
    connection = sqlite3.connect('card.s3db')
    cursor = connection.cursor()

    cursor.execute('SELECT number FROM card')
    card_check = cursor.fetchall()
    print(card_check)

    prompt_card_number = input("Enter your card number:\n")

    for number in card_check:
        if number == prompt_card_number:
            # account_interface()
            print("ok")
    else:
        print("\nWrong card number or PIN!")

    connection.commit()
    connection.close()

card check 返回一个像[('4000006601632606',), ('4000006102182200',), ('4000009048898194',), ('4000006526735435',), ('4000002961735386',), ('4000008741268614',), ('4000001893515676',)] 这样的奇怪元组列表 但我不知道如何迭代它。如果我输入正确的数字,它似乎仍然不起作用。

编辑 2: 我发现了如何遍历元组,但即使 number[0] 类型是 str,我仍然得到 Wrong card number or PIN!,而且我的输入也是 str。请参阅此代码:

def check_stage1():
    connection = sqlite3.connect('card.s3db')
    cursor = connection.cursor()

    cursor.execute('SELECT number FROM card')
    card_check = cursor.fetchall()
    print(card_check)

    prompt_card_number = input("Enter your card number:\n")

    for number in card_check:
        if number[0] == prompt_card_number:
            # account_interface()
            print(number[0])
            print(type(number[0]))
    else:
        print("\nWrong card number or PIN!")

正在返回Enter your card number: 4000009048898194 <class 'str'>

【问题讨论】:

    标签: python sqlite for-loop input tuples


    【解决方案1】:

    execute 返回一个元组,无论选择一列还是一百列。 number不是你在这句话里想的那样if number == prompt_card_number:

    【讨论】:

    • 我该怎么办?我认为它是一个元组,但在对其进行迭代后,即使我输入了正确的数字,它仍然提示我输入错误的卡或密码。
    【解决方案2】:

    一段时间后,我设法解决了这个问题。我所要做的就是弄清楚我必须使用cursor.fetchall() 来转储行并将其分配给一个变量以查看它包含的内容,结果发现它是一个元组列表。

    card_check = cursor.fetchall()
    print(card_check)
    

    从这里我用一个 for 循环选择元组的索引来遍历列表,0 像这样:

        for number in card_check:
            if number[0] == prompt_card_number:
                print("ok")
                check_stage2()
                break
        else:
            print("\nWrong card number or PIN!")
    

    现在一切正常。

    【讨论】:

      猜你喜欢
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 2021-01-01
      • 1970-01-01
      相关资源
      最近更新 更多