Python通过adodbapi向SQL Server存储二进制图片的完整实现
本文详解如何使用Python将二进制图片存入SQL Server的image类型字段。通过安装pywin32和adodbapi库,利用adodbapi.Binary处理二进制数据流,结合SQL Server OLE DB驱动,先插入元数据记录,再通过UPDATE语句将图片二进制内容写入数据库,确保数据完整保存。
Python向SQL Server存储二进制图片的实现方案
业务场景中,经常需要通过Python程序将二进制格式的图片数据写入SQL Server数据库,并存储于类型为image的字段中。
经过数小时的调试与验证,以下是实现该功能的核心代码逻辑。
安装pywin32,adodbapi
image_url = "图片链接"
try:
image_result = session.get(url=image_url, headers=headers, stream=True)
except:
image_result = session.get(url=image_url, headers=headers, stream=True)
local_filename = md5(image_url) + ".png"
print "图片下载成功"
with open(local_filename, 'wb') as f:
for chunk in image_result.iter_content(chunk_size=1024):
if chunk: # filter out keep-alive new chunks
f.write(chunk)
f.flush()
f.close()
# 读取图片,二进制格式,注意是rb
f1 = open(local_filename, "rb", )
b = f1.read()
f1.close()
# adodbapi支持插入二进制数据流
Cfg = {'server': 'XXXXXXX9', 'password': 'XXXXXXX', 'db': 'XXXXXXX'}
constr = "Provider=SQLOLEDB.1; Initial Catalog=%s; Data Source=%s; user ID=%s; Password=%s; " % (Cfg['db'], Cfg['server'], 'drc_sql', Cfg['password'])
conn = adodbapi.connect(constr)
cursor = conn.cursor()
print "DocId", DocId
# docimageid在数据表是主键
docimageid = str(DocId) + str(image_location)
print "docimageid", docimageid
sql6 = " INSERT INTO docImages (DocId,docimageid,purpose) VALUES (%s,'%s','%s') " % (int(DocId), int(docimageid), 'doclogo')
# print sql6
cursor.execute(sql6)
conn.commit()
#插入图片
cursor.execute('update docImages set Img=? where docimageid= ? ',(adodbapi.Binary(b), docimageid,))
conn.commit()
print "图片保存成功"
先插入相关信息,再去update图片到数据库里面。
上述内容涵盖了从图片下载到数据库存储的全过程,希望对相关技术学习有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









