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 列过滤表?
我真的需要强调的是,虽然这个解决方案确实解决了原始问题的问题,但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,但您最终必须确定它应该是什么。
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |