2016-12-22 19 views
0

Я новичок в Python-Flask и пытаюсь использовать MySQLDB для подключения к базе данных. Тем не менее, я не могу определить, как проверить, успешно ли выполнен запрос с помощью курсора или если он сработал. В приведенном ниже коде может кто-нибудь, пожалуйста, посоветуйте, как я могу перейти к условию в инструкции if? c - это курсор в базу данных, и он успешно соединяется, поэтому я исключил его из приведенного ниже кода.Flask mySQLDB выполнить успех или неудачу

qry = "SELECT count(*) FROM users where username = (%s)" % (username) 
try: 
    x = c.execute(qry) #Is this correct? Doe execute command return a value? 
    if <<*Check if the query executed successfully*>>: 
     return 'Success' 
    else: 
     return 'Failure' 
except Exception as e: 
    return 'Failure' 
+0

Это похоже на странную вещь, которую вы хотите сделать. Вы просите счет, так что нормальное поведение должно было бы вернуть значение, верно? –

+0

Спасибо, Дэниэл. Это был всего лишь примерный запрос. представьте себе, что я ошибочно набрал имя таблицы как «пользователи», а не «пользователь» ... или представьте вместо этого запрос на вставку, и я попытаюсь вставить пустое имя пользователя, а БД имеет имя пользователя в качестве первичного ключа. Таким образом, это провалится, и я пытаюсь захватить в возврате, если выполнение запроса выполнено успешно или нет. – tirupats

ответ

1

c.execute(qry) в вашем случае ничего не вернет. Таким образом, вы не можете использовать его для инструкции if.

Однако вы можете использовать fetchall() или fetchone(), чтобы проверить, есть ли результаты по вашему запросу. Это будет выглядеть примерно так:

qry = "SELECT count(*) FROM users where username = (%s)" % (username) 
try: 
    c.execute(qry) #Is this correct? Doe execute command return a value? 
    user = c.fetchone() 
    if user: 
     return 'Success' 
    else: 
     return 'Failure' 
except Exception as e: 
    return 'Failure' 
+0

Что делать, если это вопрос вставки, то как он будет работать? –

+0

Во-первых, не будет 'fetchone', если используется' insert'. Во-вторых, любая ошибка в 'insert' будет catch с частью' except'. – Fejs

0

У вас уже есть средства для обнаружения отказа в коде, который вы опубликовали. Если что-то пойдет не так с запросом, Python создаст исключение, которое вы можете поймать. Хотя стоит отметить, что вы никогда не должны ловить голые Исключения, и вы никогда не должны скрывать, что такое исключение; уловить соответствующие исключения MySQLdb, например MySQLdb.Error.

 Смежные вопросы

  • Нет связанных вопросов^_^