我有一个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 ...(截断)
附近的语法不正确答案 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建议的那样。