【问题标题】:Can't upload Images to MS Sql server via pyodbc无法通过 pyodbc 将图像上传到 MS Sql 服务器
【发布时间】:2014-06-28 18:19:03
【问题描述】:

我正在尝试使用 python 语言将图像上传到 Linux(raspbian) 环境中的 MS SQL 网络服务器。到目前为止,我已经能够连接到 MS Sql 并且我已经创建了一个表。我正在使用pyodbc。

#! /user/bin/env python
import pyodbc 

dsn = 'nicedcn'
user = myid
password = mypass
database = myDB

con_string = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn, user, password, database)
cnxn = pyodbc.connect(con_string)
cursor = cnxn.cursor()

string = "CREATE TABLE Database1([image name] varchar(20), [image] varbinary(max))"
cursor.execute(string)
cnxn.commit()

这部分没有任何错误。这意味着我已经成功创建了一个表不是吗?还是有什么问题?

我尝试以这种方式上传图片。

with open('new1.jpg','rb') as f:
            bindata = f.read()
cursor.execute("insert into Database1(image name, image) values (?,?)", 'new1', bindata)
cnxn.commit()

我得到了这部分的错误。它 pyodbc.ProgrammingError: ('42000', '[42000] [FreeTDS] [SQL Server] Satement(s) could not be prepare. (8180) (SQLParamData)')

请有人帮助我。谢谢

【问题讨论】:

    标签: python sql-server image upload


    【解决方案1】:

    您的参数必须作为 一个 序列传入,而不是作为两个单独的参数。元组在这里会做得很好:

    cursor.execute(
        "insert into Database1([image name], image) values (?,?)",
        ('new1', pyodbc.Binary(bindata)))
    

    请注意,您还需要正确引用image name 列,并将数据包装在pyodbc.Binary() 对象中;这将为您的 Python 版本(bytearraybytes)生成正确的数据类型。

    【讨论】:

    • 感谢您的帮助,但我仍然遇到同样的错误
    • @Kevin777:啊,是的,你的image name 栏也需要引用。
    • 感谢您的帮助。我认为它有效,但我仍然遇到错误。它说 pyodbc.ProgrammingError: ('22018', '[22018] [FreeTDS] [SQL Server]Operand type conflict: text is incompatible with varbinary(max) (206) (SQLParamData)')... 我需要改变吗我的图像coloum数据类型为图像还是blob?我可以将图像作为 jpg 直接上传到数据库吗??
    • @Kevin777:对,你需要使用pyodbc.Binary() 对象。
    • 先生还有一个问题,stackoverflow.com/questions/24491421/…请帮帮我
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-21
    • 2021-01-20
    • 2019-03-25
    • 2014-11-25
    • 1970-01-01
    • 2018-07-11
    • 2011-09-12
    相关资源
    最近更新 更多