2

従来の Access 2000 .mdb ファイルと対話するために pyodbc を使用しています。

カーソルがあり、これを実行しようとしています:

c.execute("INSERT INTO [Accounts] ([Name], [TypeID], [StatusID], [AccountCat], [id]) VALUES (?, ?, ?, ?, ?)", [u'test' 、20、10、4、2])

ただし、そうすることで、

pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver] オプション機能が実装されていません (106) (SQLBindParameter)')

疑問符をリテラル値に変更するだけでよいことは理解していますが、私の経験では、データベース間で文字列を適切にエスケープすることは...きれいではありません。

PHP と mysql はチームを組んmysql_real_escape_stringで友達を連れてきますが、値をエスケープするための pyodbc の関数を見つけることができないようです。

このデータを(Pythonから)挿入するための推奨される方法を教えていただければ、非常に役に立ちます。あるいは、odbc 文字列をエスケープするための Python 関数があれば、それも素晴らしいでしょう。

4

1 に答える 1

1

どうやら、これは Access がまた私に怒鳴っているだけのようです。

以前は、python 整数を挿入していました。今、私はpython longsを挿入しようとしました。

long をパラメーターとして挿入すると、

pyodbc.Error: ('HYC00', '[HYC00] [Microsoft][ODBC Microsoft Access Driver] オプション機能が実装されていません (106) (SQLBindParameter)')

実行を呼び出す直前にこのコードを関数に追加すると、修正されます。

    for k, v in new.items():
        new[k] = int(v) if isinstance(v, long) else v

IOW、long を int に置き換えると問題なく動作します。Go Access、なんて説明的なエラーでしょう。

厳密に言えば、これは pyodbc のバグではなく、この特定のドライバーを扱う際の落とし穴だと思います。とにかく助けてくれてありがとう。

于 2010-04-09T16:51:19.877 に答える