在python中读取SQL表

use*_*568 5 python sql type-conversion

我正在尝试在 python 中读取 SQL 表。下面的脚本我正在使用并且能够正确读取数据。

Data = pd.read_sql_query("SELECT * from Data where [ID] = " + id ,engine)
Run Code Online (Sandbox Code Playgroud)

但是当列 ID 的类型更改为 nvarchar 时,出现以下错误。

DatabaseError: Execution failed on sql 'SELECT * from Data where [ID] = 123': ('42000', '[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Error converting data type nvarchar to numeric. (8114) (SQLExecDirectW)')
Run Code Online (Sandbox Code Playgroud)

有什么方法可以使用 nvarchar 列过滤表?

Jos*_*ing 5

重要的提示:

我真的需要强调的是,虽然这个解决方案确实解决了原始问题的问题,但SQL 查询文本中使用的字符串连接通常表明存在SQL 注入漏洞 不要这样做。考虑到大多数用于 SQL 连接的包和库将提供一种真正的方法,用于使用占位符和参数将数据传递到您的查询中 - 使用它。如果您决定无论如何都使用字符串连接 - 不要连接来自外部来源/用户/客户/任何人的数据,而是“您”。你被警告了。


原答案

如果 ID 是 nvarchar,则您也需要强制转换id为nvarchar 。

Data = pd.read_sql_query("SELECT * from Data where [ID] = CAST(" + id + " AS NVARCHAR(10))", engine)
Run Code Online (Sandbox Code Playgroud)

注意:我为您的 NVARCHAR(size) 传递了 10,但您最终必须确定它应该是什么。