Python 3.7.5 Mariadb 10.4.11 привязка запроса вызывает исключение - PullRequest
0 голосов
/ 11 апреля 2020

В этом надуманном примере я пытаюсь выбрать 'Fred' жестко, затем с помощью переменной bind.

Hard select работает отлично. Пример переменной привязки завершается с ошибкой.

import sys
import string
import mysql.connector

def sanity_test():
    try:
        print("connecting")
        connection = mysql.connector.connect(user='root', password='root',
                                             host='127.0.0.1', database="MyJournal")
        print("test1")
        cursor1 = connection.cursor()
        cursor1.execute("select 'Fred'")
        records = cursor1.fetchall()
        print("There are " + str(cursor1.rowcount) + " rows in the first result set")

        print("test2")
        cursor2 = connection.cursor()
        name = "Fred";
        cursor2.execute("select %s", name)
        records2 = cursor2.fetchall()
        print("There are " + str(cursor2.rowcount) + " rows in the second result set")

    except:
        e = sys.exc_info()[0]
        print ("Exception: ", e)
    else:
        cursor1.close()
        cursor2.close()
        connection.close()
    input("Press Enter to continue...")

if __name__ == '__main__':
    sanity_test()

В результате получается

connecting
test1
There are 1 rows in the first result set
test2
Exception:  <class 'mysql.connector.errors.ProgrammingError'>

Чего мне не хватает? Какие методы доступны, чтобы получить больше информации, чем краткое исключение?

1 Ответ

1 голос
/ 11 апреля 2020

1) Обрабатывать исключения для каждого логического блока (например, подключиться, затем cursor.create + execute), но не для нескольких блоков.

2) Получить более описательное сообщение об ошибке

except mysql.connector.Error as err:
    print("Unexpected error : ", format(err))

3) SQL стандарт требует одинарных или двойных кавычек для строк внутри операторов, например cursor.execute("SELECT '%s'", ("foo",))

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