Sqlalchemy ms sql ошибка преобразования для значения, отличного от параметров запроса - PullRequest
0 голосов
/ 04 февраля 2020

Я использую sqlalchemy orm. Я обновил свою таблицу (как в db, так и в orm), изменив важность строки с "VARCHAR" на "TINYINT". По какой-то причине, всякий раз, когда я пытаюсь добавить строку, она с «критическим» вместо нового значения цифр c.

«критическим» была одним из ранее использованных значений, которые я заменила на TINYINT и теперь используйте enum. Я проверил весь исходный код, и слово «критический» не используется ни разу.

Даже параметры в стеке ошибок не совпадают. Кажется, что какое-то старое значение было вставлено. Я также попытался запустить это на другой машине на всякий случай, то же самое произошло.

(pyodbc.DataError) ('22018', "[22018] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Conversion failed when converting the varchar value 'critical' to data type tinyint. (245) (SQLExecDirectW)")
[SQL: INSERT INTO fulladb.packages (id, version, rdate, importance, metadata, source_url, pkgdata) OUTPUT inserted.id VALUES (?, ?, ?, ?, ?, ?, ?)]
[parameters: ('858D60AF-A5E9-43F1-B19A-2D9CD10C0115', '1.1.1', datetime.datetime(2001, 1, 1, 0, 0), 0, '[]', 'http://www.quack.com', '{}')]

РЕДАКТИРОВАТЬ: я попытался выполнить больше запросов в SQL Server Managment Studio. Всякий раз, когда я запускаю запрос на вставку, где я вставляю VARCHAR в столбец [важность], он правильно заявляет, что не может преобразовать введенную мною строку (печатает правильную строку в ошибке) в tinyint.

Если я вставляю Значение TINYINT (правильное), тогда оно по умолчанию всегда говорит, что не может преобразовать строку VARCHAR в «критическую». По какой-то причине он игнорирует int и всегда по умолчанию равен VARCHAR.

EDIT2: для устранения любых недоразумений. Я делаю это на пустой тестовой базе данных, я удалил все таблицы и создал новые. Это не было сделано обновлением.

1 Ответ

1 голос
/ 04 февраля 2020

Похоже, что ваша попытка обновить схему в БД не удалась. Поскольку «критическое» было одним из ранее использованных значений, БД отклонила обновление схемы, поскольку не знает, как обрабатывать преобразование VARCHAR в TINYINT. Пожалуйста, проверьте БД в командной строке или с помощью другого инструмента, чтобы убедиться, что схема действительно была обновлена.

...