通过PYODBC将格式正确的Windows路径名传递给SQL Server

时间:2015-03-25 16:41:23

标签: python sql-server pyodbc

我需要python通过pyodbc发出一个查询,将.PNG文件作为blob插入表中。问题似乎与如何表示文件的路径有关。这是一些代码:

    OutFilePath = 'd:\\DilerBW_images\\'

    OutFileName = SubjID+'_'+str(UserID)+'_'+DateTime+'.png'

    print OutFilePath+OutFileName        
    qstring = ('insert into [wpic-smir].[Diler_BW].[Beckwith].[PlotImages](ID, UserID, ImageType, MoodType, ImageIndex, ImageData)'
    'select '+str(SubjID)+' as ID, '+str(UserID)+' as UserID,'
    '1 as ImageType,'
    'NULL as MoodType,'
    'NULL as ImageIndex,'
    '* from OPENROWSET(Bulk \''+OutFilePath+OutFileName+'\', SINGLE_BLOB) as ImageData')
    print qstring

    cursor.execute(qstring)
    conn.commit()

` 这是输出:

   d:\DilerBW_images\999123_999123_2015-01-20_14-25-07.013000.png

    insert into [wpic-smir].[Diler_BW].[Beckwith].[PlotImages](ID, UserID, ImageType, MoodType, ImageIndex, ImageData)select 999123 as ID, 999123 as UserID,1 as ImageType,NULL as MoodType,NULL as ImageIndex,* from OPENROWSET(Bulk 'd:\DilerBW_images\999123_999123_2015-01-20_14-25-07.013000.png', SINGLE_BLOB) as ImageData

现在,这是我得到的错误:

Traceback (most recent call last):
File "c:\pythonscripts\DilerBW_Plot_Single_report_2_EH.py", line 253, in <module>
cursor.execute(qstring)
pyodbc.ProgrammingError: ('42000', '[42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]Cannot bulk load because the file "d:\\DilerBW_images\\999123_999123_2015-01-20_14-25-07.013000.png" could not be opened. Operating system error code 3(The system cannot find the path specified.). (4861) (SQLExecDirectW)')

对不起,这太久了。请注意,错误消息中的文件路径包含双反斜杠,其中查询仅包含单个参数。我已经广泛研究了构建字符串的各种方法(os.path.sep,使用原始字符串,os.path.join),但它似乎并不重要,我不确定输入字符串是问题。同样,如果我将查询剪切并粘贴到输出中的SSMS中并执行它,它就可以正常工作。

感谢名单。

0 个答案:

没有答案