6

imageSQLServerデータベースのデータ型の列にバイナリデータを挿入しようとしています。推奨されるデータ型はわかっvarbinary(max)ていますが、スキーマを変更する権限がありません。

とにかく、私はファイルの内容を読んで、それを以下のようにpyodbc.Binary()でラップしています:

f = open('Test.ics', 'rb')
ablob = f.read().encode('hex')
ablob = pyodbc.Binary(ablob)

print repr(ablob)正しい値が表示されたらbytearray(b'424547494e3a5 . . .(省略記号が追加されています)。

ただし、挿入後

insertSQL = """insert into documents(name, documentType, document, customerNumber) values(?,?,?,?)"""
cur.execute(insertSQL, 'test200.ics', 'text/calendar', pyodbc.Binary(ablob), 1717)

ドキュメント列の値は0x343234353 . . .、16進データがASCII文字コードに変換されたかのように表示されます。

値をpyodbc.Binary()でラップすると、これで対処できると思いましたか?どんな助けでも大歓迎です。

Python2.7とSQLServer2008 R2(10.50)を使用しています。

編集

ベアグルは、私が不必要にencode('hex')を呼び出していて、それが私の問題につながっていることを親切に指摘しました。これはデータを文字列に強制したに違いないと思います(ただし、より完全な説明が役立つでしょう)。

作業コード:

ablob = pyodbc.Binary(f.read())
cur.execute(insertSQL, 'test200.ics', 'text/calendar', ablob, 1717)
4

1 に答える 1