Получение значения False при проверке наличия входных данных в базе данных, где на самом деле они присутствуют - PullRequest
0 голосов
/ 08 января 2019

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

conn = sqlite3.connect('db_employees.db')
c = conn.cursor()
query = "SELECT * FROM tb_emp_info"
c.execute(query)
result = c.fetchall()
in_ = 'Permanent', # 'Permanent' is present in the database
print(in_ in result) # check if input is present in the database

1 Ответ

0 голосов
/ 08 января 2019

Проблема в том, что fetchall() возвращает кортеж для каждой строки (обратите внимание, что ссылка предназначена для MySQL, но объяснение лучше, чем в официальных документах):

Метод выбирает все (или все оставшиеся) строки из набора результатов запроса и возвращает список кортежей . Если больше нет доступных строк, возвращается пустой список.

Это означает, что result будет выглядеть так:

[(field1, field2, f3...), (field1, field2, f3...), ...]

Теперь in проверит, равен ли (field1, field2, f3...) Permanent, что, очевидно, всегда будет ложным.

Согласно этому вопросу :

print(len([item for item in result if in_ in item]) > 0)

Или с предложением @ shmee:

print(any(item for item in result if in_ in item))

Это должно вывести True, если in_ появляется где-нибудь в result.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...