#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
что его никогда не бывает или[]
или[(...),....]
, поэтому приведите еще несколько примеров, если вы ищете решение