将pdf插入sql表的图像字段

时间:2012-12-17 19:50:14

标签: python sql image pdf bytearray

我有一个python脚本,我需要在图像字段中将pdf插入到SQL表中。 我可以在这个字段中添加任何内容 - 数字,文本,pdf的十六进制版本,但我不能使用bytes或bytearray添加pdf。 document_image字段被定义为图像。我已经验证了sql语句本身是正确的 - 如果我对document_image使用null。

在下面的代码中,我尝试了hex_report(将插入,但adobe无法读取), array_report和bin_report - 这两个给出了相同的错误。

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后面的未闭合引号 %âãÏÓ 10 0 obj <> endobj 15 0 obj

... '%PDF-1.5 ...(截断)

附近的语法不正确

2 个答案:

答案 0 :(得分:0)

你能展示表结构,所以我们可以从那里开始吗?

我会用于那个目的varbinary(MAX)。它会给你一些灵活性。 您也可以在MSDN

上找到一些帮助

答案 1 :(得分: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)

说了这么多,我不建议使用图片字段 - 它很快就会被弃用。改为使用varBinary(max),如MS建议的那样。

相关问题