无法使用pyodbc执行参数化查询

时间:2017-04-04 09:14:54

标签: sql python-3.x odbc pyodbc 4d-database

我有这个查询通过ODBC工作到4D数据库。它按预期返回记录。

with pyodbc.connect('dsn=datasource') as db4dcon:  
    print(db4dcon)
    db4dcur = db4dcon.cursor()
    print(db4dcur)
    db4dcur.execute("SELECT * FROM Sampling WHERE Id='2017-043';")
    print(db4dcur.rowcount)

<pyodbc.Connection object at 0x029CC068>
<pyodbc.Cursor object at 0x0292B058>
3

我想将其更改为参数化版本,但我无法成功。我已阅读doc,但这些示例都不适合我。

既不:

db4dcur.execute("SELECT * FROM Sampling WHERE Id=?;", '2017-043')

也:

db4dcur.execute("SELECT * FROM Sampling WHERE Id=?;", ('2017-043',))

也:

db4dcur.execute("SELECT * FROM Sampling WHERE Id=?;", ['2017-043']))

工作。它们都会导致以下错误:

<pyodbc.Connection object at 0x02C7C068>
<pyodbc.Cursor object at 0x028DB058>
Traceback (most recent call last):
  File "test.py", line 251, in <module>
    main(sys.argv)
  File "test.py", line 221, in main
    db4dcur.execute("SELECT * FROM Sampling WHERE Id=?;", '2017-043')
pyodbc.Error: ('08004', '[08004] Server rejected the connection:\nFailed to execute statement.\r (1110) (SQLExecDirectW)')

我检查了我的ODBC连接,似乎服务器在替换通配符时拒绝了格式错误的查询,但由于ODBC mechanism,我无法检查它的发送方式。有没有人知道这个参数化查询出了什么问题?

0 个答案:

没有答案