“将表达式转换为数据类型为nvarchar的算术溢出错误”:pypyodbc + SQL Server

时间:2019-07-06 07:51:08

标签: sql-server python-3.x pypyodbc

|id    | language 

|123456| GE

我无法在SQL Server中更新数据。

我是初学者。我正在编写电报bot,我想添加新语言。因此,我使用数据库。 我有一个包含两列的表,一列声明为nvarchar(id),另一列声明为nchar(language),我正在尝试更改语言。

import pypyodbc

...
#for example
id = 123456
lang = 'EN'
#
data = ("""
           UPDATE bottest
           SET language = ?
           WHERE id = ?;
           """)
k = (id, lang)
cursor.execute(data, k).rowcount
cursor.commit()

出现此错误:

 File "C:\Users\MyPC\PycharmProjects\bottest_flask_i\venv\lib\site-packages\pypyodbc.py", line 1007, in check_success
    ctrl_err(SQL_HANDLE_STMT, ODBC_obj.stmt_h, ret, ODBC_obj.ansi)
  File "C:\Users\MyPC\PycharmProjects\bottest_flask_i\venv\lib\site-packages\pypyodbc.py", line 977, in ctrl_err
    raise DataError(state,err_text)
pypyodbc.DataError: ('22003', '[22003] [Microsoft][ODBC SQL Server Driver][SQL Server]Arithmetic overflow error converting expression to data type nvarchar.')

1 个答案:

答案 0 :(得分:1)

您的参数值指定顺序错误。 language的参数(在SET子句中)出现在id的参数(在WHERE子句中)之前,因此您需要首先指定language参数值。也就是说,代替

k = (id, lang)

您需要使用

k = (lang, id)  # same order as the parameter placeholders appear in the command text