PypyODBC с параметрами: [ODBC Microsoft Access Driver] Слишком мало параметров.Ожидаемый 3 (не проблема Даты) - PullRequest
0 голосов
/ 08 мая 2019

Я настраиваю маленький API RestFul на основе Flask для доступа к БД. Я рассмотрел методы GET и POST, которые прекрасно работают, но имеют проблемы с PUT.

Я уже поменял pyodbc на pypyodbc, так как на самом деле у него есть методы update. Я запускаю его на 10.0.17134.1 (пробовал 14.00.7010.1000, который старше) 32-битный драйвер ODBC с 32-битным питоном 3.7.2 на компьютере с Windows 10.

def put(self, code_id):
        query = request.get_json()[0]
        sql = 'UPDATE `employees` SET `employee`=?, `access_level`=? WHERE `CODE`="' + code_id+ '";'
        params = [query['Employee'], query['Access level']]

        cursor.execute(sql, params)
        return Response(status=200)

Я получаю следующую ошибку: pypyodbc.DatabaseError: ('07002', '[07002] [ODBC Microsoft Access Driver] Too few parameters. Expected 3

Я пытался отправить только один параметр, чтобы изменить одно поле, но все равно получаю ту же ошибку с небольшим поворотом - он будет ожидать, что вы отправите 2 параметра вместо этого. Если вы добавите один дополнительный параметр в список «params», то вы получите pypyodbc.ProgrammingError: ('HY000', 'The SQL contains 2 parameter markers, but 3 parameters were supplied') ошибка.

Кроме того, имена столбцов и таблиц в БД на русском языке (которые я перевел) и не могут быть изменены. Поэтому кавычки необходимы при выполнении запроса.

PS. Запросы INSERT и SELECT работают просто замечательно.

1 Ответ

0 голосов
/ 08 мая 2019

ОК, я наконец-то понял.

Таким образом, очевидно, что для условия WHERE требуются одинарные кавычки (') вместо двойных (").

Когда в них заключен аргумент, он работает как шарм.

...