1

このクエリは、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

パラメータ化されたバージョンに変更したいのですが、うまくいきませんでした。私はドキュメントを読みましたが、これらの例はどれもうまくいきません。

ない:

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メカニズムのために送信されたものを確認できません。このパラメータ化されたクエリで何が問題になっているのか、誰かが考えていますか?

4

0 に答える 0