带参数的 PypyODBC:[ODBC Microsoft Access Driver] 参数太少。预期 3(不是日期问题)
PypyODBC with parameters: [ODBC Microsoft Access Driver] Too few parameters. Expected 3 (not a Date issue)
我正在基于 Flask 设置小型 RestFul API 以访问数据库。
我已经解决了 GET 和 POST 方法,它们运行良好,但 PUT 有问题。
我已经将 pyodbc 换成了 pypyodbc,因为它实际上有 'update' 方法。我 运行 它在 10.0.17134.1 上(试过 14.00.7010.1000 更旧)ODBC 32 位驱动程序和 32 位 python 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')
错误。
此外,数据库中的列和 table 名称是俄语(我翻译的),无法更改。所以查询时必须加引号。
PS。 INSERT 和 SELECT 查询工作得很好。
好的,我终于明白了。
所以,显然 WHERE
子句需要单引号 (') 而不是双引号 (")。
当参数包含在其中时,它就像一个魅力。
我正在基于 Flask 设置小型 RestFul API 以访问数据库。 我已经解决了 GET 和 POST 方法,它们运行良好,但 PUT 有问题。
我已经将 pyodbc 换成了 pypyodbc,因为它实际上有 'update' 方法。我 运行 它在 10.0.17134.1 上(试过 14.00.7010.1000 更旧)ODBC 32 位驱动程序和 32 位 python 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')
错误。
此外,数据库中的列和 table 名称是俄语(我翻译的),无法更改。所以查询时必须加引号。
PS。 INSERT 和 SELECT 查询工作得很好。
好的,我终于明白了。
所以,显然 WHERE
子句需要单引号 (') 而不是双引号 (")。
当参数包含在其中时,它就像一个魅力。