0

画像フィールドのSQLテーブルにPDFを挿入する必要があるPythonスクリプトがあります。このフィールドには、数値、テキスト、PDFの16進バージョンなど、ほぼすべてのものを追加できますが、bytesまたはbytearrayを使用してPDFを追加することはできません。document_imageフィールドは画像として定義されています。sqlステートメント自体が正しいことを確認しました-document_imageにnullを使用した場合。

次のコードでは、hex_report(挿入されますが、adobeでは読み取れません)、array_report、bin_reportを試しました。これら2つで同じエラーが発生します。

report_map = "C:\\simple_test_pdf.pdf"
initial_report = open(report_map, 'rb').read()

hex_report =  binascii.b2a_hex(initial_report)
array_report = bytearray(initial_report)
bin_report = bytes(initial_report)

db = abc_sql()
db.Set_database("image")
conn   = db.Open_Connection()   

conn.execute_scalar("DECLARE   @return_value int, \
@new_serial_id int, \
@return_msg varchar(4000) \
EXEC    @return_value = image.image_insert \
@new_serial_id = @new_serial_id  OUTPUT, \
@return_msg = @return_msg OUTPUT,  \
@pd_request_id = 776, \
@mime_type = 'application/pdf', \
@document_file_name = 'Report_Results.pdf', \
@document_description = 'Report and Map', \
@document_image = %s \
SELECT @new_serial_id as '@new_serial_id',\
@return_msg as '@return_msg', \
'Return Value' = @return_value", str(bin_report ))

私が得ているエラーは次のとおりです。

mssql.MssqlDatabaseException:SQL Serverメッセージ105、重大度15、状態1、1行目:文字列の後の閉じられていない引用符'%PDF-1.5%âãÏÓ100 obj <> endobj 15 0 obj

...'%PDF-1.5の近くの構文が正しくありません...(切り捨てられました)

4

2 に答える 2

0

テーブルの構造を示して、そこから始められるようにできますか?

そのためにvarbinary(MAX)を使用します。それはあなたにいくらかの柔軟性を与えるでしょう。また、 MSDNでいくつかのヘルプを見つけることができます

于 2012-12-17T20:36:45.777 に答える
0

あなたはこのようなことをすることができます、

INSERT INTO Table(ID, Blob) 
SELECT 0, * FROM OPENROWSET(BULK N'C:\YourPathFolder\File.pdf', SINGLE_BLOB) rs

その TSQL ステートメントをパラメーター化したい場合は、次のように実行できます。

declare @path varchar(5000)
declare @SQL varchar(5000)
set @path = 'c:\YourPath\Yourfile.pdf'
set @SQL = 'INSERT INTO Table(ID, Blob) 
SELECT 0, * FROM OPENROWSET(BULK N''' +@CertPath +''', SINGLE_BLOB) rs'
execute (@SQL)

とはいえ、画像フィールドの使用はお勧めしません。まもなく廃止される予定です。MS が推奨するように、代わりに varBinary(max) を使用してください。

于 2012-12-18T14:38:43.377 に答える