0

我有一个 python 脚本,我需要将 pdf 插入到图像字段的 SQL 表中。我可以在该字段中添加几乎任何内容——数字、文本、pdf 的十六进制版本,但我无法使用字节或字节数组添加 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 ...附近的语法不正确...(截断)

4

2 回答 2

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 回答
0

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

我会为此目的使用 varbinary(MAX)。它会给你一些灵活性。你也可以在MSDN上找到一些帮助

于 2012-12-17T20:36:45.777 回答