SQLite запрос SELECT

Помогите понять, почему программа выдает ошибку при логической обработке запроса SQL SELECT. Смысл в том, что нужно проверить существует ли в БД код клиента, если нет просто вывести сообщение. Если код есть, все работает корректно. А вот если запрос не находит код, программа сообщения не выдает.

db_path = 'Bonus_db.sqlite'

    def go_to_Check_Client(self):
        conn = sqlite3.connect(db_path)
        cur = conn.cursor()

        code = self.codefield.text()
        cur.execute('SELECT SoldTo FROM Customers WHERE SoldTo = ?', (code,))

        if len(code) == 0:
            self.error.setText('Please fill in Customer Sold-to')
        elif cur.fetchone() is not None:
            if int(code) == cur.fetchone()[0]:
                self.error.setText('Customer with this Sold-to already exists')
            else:
                self.error.setText('Customer can be saved')
        else:
            self.error.setText('Customer can be saved')


Ответы (2 шт):

Автор решения: Roman-Stop RU aggression in UA

Если запись в БД не найдена, то проверка elif int(code) == cur.fetchone()[0]: не сработает, а если точнее, то в этом месте будет брошено исключение, так как идет доступ к элементу списка по индексу 0, тогда как в списке нет ни одного элемента. Так как бросается исключение, то программа не доходит до ветки else.

Правильно проверять будет так: elif cur.fetchone() is not None. Проверять конкретное значение нет смысла, так как вы ищете по коду и его же возвращаете, значение не может отличаться от того, что вы передали в условие. Важно только наличие или отсутствие возвращенной записи.

→ Ссылка
Автор решения: Namerek

Если вкратце то:

cur.execute('SELECT SoldTo FROM Customers WHERE SoldTo = ?', (code,))
code, = cur.fetchone() or (None,)
# остальное на Ваше усмотрение
→ Ссылка