【问题标题】:What is the error in my SQL query with Python? [closed]我使用 Python 进行的 SQL 查询中的错误是什么? [关闭]
【发布时间】:2025-12-03 10:45:01
【问题描述】:

我正在尝试使用 python 从 SQL Server 数据库中检索数据,但系统崩溃并显示以下错误:

ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]关键字'where'附近的语法不正确。(156) (SQLExecDirectW); [42000] [Microsoft][ ODBC SQL Server 驱动程序][SQL Server]无法准备语句。(8180)")

代码:

import pandas as pd
import streamlit as st 

search_term=st.text_input("Enter Search Term")
cursor.execute("select * from testDB.dbo.t1 where ID = ? OR where  first =?",search_term,search_term) 
                                
dd = cursor.fetchall()
print(dd)

【问题讨论】:

  • where ID = ? OR where first =? 你多了一个“where”
  • 但我的查询必须搜索列名“ID”或列名“first”
  • 一个查询范围只有一个WHERE,@khaledM_dev。查看[示例文档(docs.microsoft.com/en-us/sql/t-sql/queries/…),您会立即看到问题。

标签: python sql-server pyodbc


【解决方案1】:

您有两个 where 子句。应该只有一个where 子句,它可以有任意多的逻辑运算符连接的条件:

cursor.execute("select * from testDB.dbo.t1 where ID = ? OR first =?", search_term, search_term) 

【讨论】:

  • 我试过你的答案现在我有以下错误:DataError: ('22018', "[22018] [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the nvarchar value 'test5' to data type int. (245) (SQLExecDirectW)")
  • 其中 ID 为 int 但另一列为 nvarchar
【解决方案2】:

您在子句中添加了一个额外的WHERE

正确的写法是:

cursor.execute("select * from testDB.dbo.t1 where ID = ? OR first = ?",search_term,search_term)

另外,如果您直接编写 SQL 语句,而不使用 ORM,我建议您直接连接到您的数据库并在那里测试查询,这样会更容易查找和调试错误。 如果你想要一个很棒的免费替代品,并且使用 Mac,我建议 Postico

【讨论】: