我已经阅读了几十篇类似的帖子并尝试了所有内容,但在尝试使用pyodbc将参数传递给简单查询时仍然收到错误消息。如果在其他地方有答案但我无法找到它,请道歉
我有一个非常简单的表格:
select * from Test
产量
a
b
c
这很好用:
import pyodbc
import pandas
connection = pyodbc.connect('DSN=HyperCube SYSTEST',autocommit=True)
result = pandas.read_sql("""select * from Test where value = 'a'""",connection,params=None)
print(result)
结果:
value
0 a
但是,如果我尝试使用参数执行where子句则失败
result = pandas.read_sql("""select * from Test where value = ?""",connection,params='a')
产量
Error: ('01S02', '[01S02] Unknown column/parameter value (9001) (SQLPrepare)')
我也试过这个
cursor = connection.cursor()
cursor.execute("""select * from Test where value = ?""",['a'])
pyodbcResults = cursor.fetchall()
仍然收到同样的错误
有谁知道发生了什么事?这可能是我要查询的数据库的问题吗?
PS。我查看了以下帖子以及答案9第一部分中的语法,其中日期通过字符串传递,看起来与我正在做的相同
pyodbc sql包含0个参数标记,但提供了1个参数''hy000'
由于
答案 0 :(得分:2)
pandas.read_sql(sql,con,index_col = None,coerce_float = True,params = None,parse_dates = None,columns = None,chunksize = None)[https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_sql.html]¶
params:list,tuple或dict,optional,default:None
示例:
cursor.execute("select * from Test where value = %s",['a'])
或命名参数示例:
result = pandas.read_sql(('select * from Test where value = %(par)s'),
db,params={"par":'p'})
在pyodbc中直接在sql参数后写parms:
cursor.execute(sql,* parameters)
例如:
onepar = 'a'
cursor.execute("select * from Test where value = ?", onepar)
cursor.execute("select a from tbl where b=? and c=?", x, y)