Обработка кортежа в SQLite с помощью Python

#python #sqlite

#python #sqlite

Вопрос:

Я пытаюсь запросить базу данных sqlite3, чтобы проверить, существует ли уникальный идентификатор пользователя. Как это работает, пользователь нажимает кнопку Tkinter, а затем вводит свое значение idTag. Команда reader.read() используется для получения значения тега. Как только пользователь введет свой idTag, функция datacheck(): проверит столбец userId базы данных, чтобы найти совпадающий idTag и userId .

idTag возвращает кортеж. Для примера idTag значение будет выглядеть следующим образом (123456, q5gln7b8dhe). Я заинтересован в проверке второй idTag части значения, поэтому значение q5gln7b8dhe . Это идентификатор пользователя.

Моя проблема заключается в for x in row_returned постоянном значении true, даже если idTag не соответствует сохраненному идентификатору пользователя. Я думаю, что c.fetchone() постоянно извлекает данные, не проверяя, совпадают ли значения idTag и userId. Или что данные вообще не извлекаются.
Сообщение об ошибке: for x in row_returned : , TypeError : 'NoneType' object is not iterable

 def chk():

# Function that handels getting User ID 
def tagScanner():
    # Get user id value
    idTag = reader.read()
    # If tag is scanned 
    if idTag:
        # call Database function to check returned idTag
        dataCheck(idTag)
        return idTag

# Function handles SQLite3 Database     
def dataCheck(idTag):
    Database = sql.connect('MedaDataBase.db')
    # cursor
    c = Database.cursor()
    # Check if the idTag maches a value in the userID column of sqlite DB
    query = 'SELECT userID FROM Users WHERE userID = ?'

    c.execute(query, (str(idTag),))
    row_returned = c.fetchone()
    for x in row_returned :
        print('Checking for User')
        #checking the second value in tulpe
        if x[1] == idTag:
            print('User Verified')
        else:
            print('User does not exist')

        Database.close()

# Call scanning function 
tagScanner()
  

Комментарии:

1. если idTag[1] == 'q5gln7b8dhe': #do something вам не понравится эта работа?. Также я не думаю fetchall() , что когда-нибудь вернется None , я видел, как он возвращается [] , но не None

2. @CoolCloud Нет, это не сработает, потому idTag что значение будет разным для каждого пользователя.

3. Приведите пример row_returned , скажите print(row_returned) и дайте мне знать

4. @CoolCloud Моя ошибка, на самом деле просто распечатываю row_returned возвраты [ ] . Итак, я предполагаю, что проблема заключается в if row_returned is not None том, что он не возвращает результаты запроса.

5. Да if row_returned is not None всегда будет правдивым, потому None что его никогда не бывает или [] или [(...),....] , поэтому приведите еще несколько примеров, если вы ищете решение