«Ошибка арифметического переполнения при преобразовании выражения в тип данных nvarchar»: pypyodbc + SQL Server - PullRequest
1 голос
/ 06 июля 2019
|id    | language 

|123456| GE

Я не могу обновить данные в SQL Server.

Я новичок. Я пишу бота для телеграмм и хочу добавить новые языки. Поэтому я использую базу данных.У меня есть таблица с 2 столбцами, один объявлен как nvarchar (id), а другой как nchar (язык), и я пытаюсь изменить язык.

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 Ответ

1 голос
/ 07 июля 2019

Ваши значения параметров указаны в неправильном порядке. Параметр для language (в предложении SET) отображается перед параметром для id (в предложении WHERE), поэтому сначала необходимо указать значение параметра language. То есть вместо

k = (id, lang)

вам нужно использовать

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