image
SQLServerデータベースのデータ型の列にバイナリデータを挿入しようとしています。推奨されるデータ型はわかっ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)