Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不同值的Sqlalchemy mssql转换错误,然后查询参数_Python_Sql Server_Tsql_Sqlalchemy_Odbc - Fatal编程技术网

Python 不同值的Sqlalchemy mssql转换错误,然后查询参数

Python 不同值的Sqlalchemy mssql转换错误,然后查询参数,python,sql-server,tsql,sqlalchemy,odbc,Python,Sql Server,Tsql,Sqlalchemy,Odbc,我正在使用sqlalchemy orm。通过将行重要性从“VARCHAR”更改为“TINYINT”,我已经更新了我的表(在db和orm中)。出于某种原因,每当我尝试添加一行时,它都会使用“critical”而不是新的数值 “critical”是以前使用的值之一,我已将其替换为TINYINT,现在使用enum。我检查了整个源代码,甚至没有一个单词“critical”的用法 甚至错误堆栈中的参数也不匹配。似乎插入了一些旧值。我也试着在另一台机器上运行这个,以防万一,同样的事情发生了 (pyodbc.

我正在使用sqlalchemy orm。通过将行重要性从“VARCHAR”更改为“TINYINT”,我已经更新了我的表(在db和orm中)。出于某种原因,每当我尝试添加一行时,它都会使用“critical”而不是新的数值

“critical”是以前使用的值之一,我已将其替换为TINYINT,现在使用enum。我检查了整个源代码,甚至没有一个单词“critical”的用法

甚至错误堆栈中的参数也不匹配。似乎插入了一些旧值。我也试着在另一台机器上运行这个,以防万一,同样的事情发生了

(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', '{}')]
编辑: 我尝试在SQLServerManagementStudio中运行更多查询。每当我运行insert查询,在[importance]列中插入VARCHAR时,它都会正确地声明它无法将我输入的字符串(在错误中打印正确的字符串)转换为tinyint

如果我插入一个TINYINT(correct)值,那么默认情况下它总是说它不能转换VARCHAR字符串“critical”。出于某种原因,它忽略int并始终默认为VARCHAR

编辑2:
消除误解。我在一个空的测试数据库上这样做,我删除了所有的表并创建了新的表。这不是通过更新完成的

您试图在数据库中更新架构的尝试似乎没有成功。由于“critical”是以前使用的值之一,DB拒绝了模式更新,因为它不知道如何处理VARCHAR到TINYINT的转换。请检查命令行上的数据库或使用其他工具,以确保模式已实际更新

应该详细说明。”“critical”是一个列值,而不是名称,它只是发生的10个值之一。我用SQLServerManagementStudio检查了数据库,表已更新。编辑:从manager运行查询也引发了错误。如果我添加字符串,错误将正确显示错误插入的字符串。如果我使用int,默认情况下会引发无法转换“critical”的错误。在sql server management studio中,能否将“critical”视为列值之一?或者所有旧的VARCHAR值都通过某种映射转换为TINYINT?没有旧值。我删除了所有旧表,然后运行了更新的创建脚本。