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 шт):
Если запись в БД не найдена, то проверка elif int(code) == cur.fetchone()[0]: не сработает, а если точнее, то в этом месте будет брошено исключение, так как идет доступ к элементу списка по индексу 0, тогда как в списке нет ни одного элемента. Так как бросается исключение, то программа не доходит до ветки else.
Правильно проверять будет так: elif cur.fetchone() is not None. Проверять конкретное значение нет смысла, так как вы ищете по коду и его же возвращаете, значение не может отличаться от того, что вы передали в условие. Важно только наличие или отсутствие возвращенной записи.
Если вкратце то:
cur.execute('SELECT SoldTo FROM Customers WHERE SoldTo = ?', (code,))
code, = cur.fetchone() or (None,)
# остальное на Ваше усмотрение