0

Microsoft SQL 2005 データベースにクエリを実行し、データを処理して、更新したデータのキーを自分のマシンのローカルにある sqllite3 データベース ストアに書き込もうとしています。

私が使用しているツールは、python 2.7、pyodbc、および sqllite3 です。私はWindows 7を使用しており、SQLサーバーとpyodbcを使用したSQLネイティブクライアントドライバーを使用してmssql dbに接続しようとしたドライバーは、どちらも同じ結果をもたらします。

私が問題を抱えているフィールドは、mssql のバイナリ (16) である uuid フィールドです。pyodbc を使用してデータをクエリすると、bytearray() で返されます。

これは、次を実行したときに得られる出力です。

id = mycursor.fetchone()
print id

àO÷�eÅO‹1ÝWt'E

repr(id)

bytearray(b'\xe0O\xf7\x1d\x9de\xc5O\x8b1\x0e\xddWt\x91E')

その ID を sqllite3 データベースに挿入すると、次のようになります。

s = sqlite3.connect('tmp.db')
cursor = s.cursor()
s.execute("create table recs(uuid blob)")
s.commit()
s.execute("insert into recs (uuid) values(?)", id)

1 s.execute("recs (uuid) 値 (?) に挿入", id)

ProgrammingError: 提供されたバインディングの数が正しくありません。現在のステートメントは 1 を使用しており、16 個が提供されています。

4

1 に答える 1

0

bufferPythonの値はオブジェクトである必要があります。

>>> s.execute("insert into recs (uuid) values(?)", (buffer(id), ))
<sqlite3.Cursor object at 0x011CD2E0>
>>> r = s.execute("select * from recs").fetchone()
>>> r
(<read-write buffer ptr 0x011F9280, size 16 at 0x011F9260>,)
>>> r[0]
<read-write buffer ptr 0x011F9280, size 16 at 0x011F9260>
>>> str(r[0])
'\xe0O\xf7\x1d\x9de\xc5O\x8b1\x0e\xddWt\x91E'
>>> str(r[0]) == id
True
于 2012-08-06T19:41:19.637 に答える