从 SQLite 检索图像,“无效或不支持的图像格式”

Retrieving image from SQLite, “Invalid or Unsupported Image Format”

我正在使用 Cloud9 IDE,当我打开在 SQLite 中存储和检索的图像时,我得到一个 "Invalid or Unsupported Image Format"。当我将 convertToBinaryData 文件输入到 writeTofile 函数时,会检索到照片,所以这肯定与 SQL 有关。

有人可以协助正确格式化吗?

def convertToBinaryData(filename):
#Convert digital data to binary format
with open(path, 'rb') as file:
    blobData = file.read()
return blobData

def writeTofile(data, filename):
# Convert binary data to proper format and write it on Hard Disk
with open(filename, 'wb') as file:
    advert = file.write(data)

@app.route("/place", methods=["GET", "POST"])
@login_required
def place():
if request.method == "GET":
    return render_template("place.html")

if request.method == "POST":

我已经尝试了以下四个选项并且 none 有效。

'''Version 1'''
    placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
    ad_photo = convertToBinaryData(request.form.get("photo"))

    db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))

    row = db.execute('SELECT photo FROM food')
    print (str(row[0]))
    writeTofile(row[0], "dan.jpg")

错误:file.write(数据) 类型错误:需要类似字节的对象,而不是 'dict'

'''Version 2'''
    placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
    ad_photo = convertToBinaryData(request.form.get("photo"))
    db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))

    row = db.execute('SELECT photo FROM food')
    print (row[0])
    writeTofile(row[0], "dan.jpg")

错误:file.write(数据) 类型错误:需要类似字节的对象,而不是 'dict'

'''Version 3'''
    placing = "INSERT INTO food (UID, category, title, description, shipping, photo, county, area, post_time) VALUES (?,?,?,?,?,?,?,?,CURRENT_TIMESTAMP)"
    ad_photo = convertToBinaryData(request.form.get("photo"))
    db.execute(placing, (session["user_id"], request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.getlist("option[]"), ad_photo, request.form.get("county"), request.form.get("area")))

    row = db.execute('SELECT photo FROM food')
    print (str(row[0]))
    mystring = str(row[0])
    b = mystring.encode('utf-8')
    writeTofile(b, "dan.jpg")

错误:没有错误,但创建的 JPEG 是 "Invalid or Unsupported Image Format"

'''Version 4'''
    sqliteConnection = sqlite3.connect('finance.db')
    cursor = sqliteConnection.cursor()

    placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, UID) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
    ad_photo = convertToBinaryData(request.form.get("photo"))

    # Convert data into tuple format
    data_tuple = (request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"])
    cursor.execute(placing, data_tuple)
    sqliteConnection.commit()
    print("Image and file inserted successfully as a BLOB into a table")

    cursor.execute("SELECT photo from food")
    record = cursor.fetchone()

    writeTofile(record, "dan.jpg")
    cursor.close()

错误:TypeError:需要类似字节的对象,而不是 'tuple'

好吧,在写出我所有的错误然后尝试完全不同的东西后,我终于弄明白了。感谢您的共鸣板。

def place():
"""place an ad"""
if request.method == "GET":
    return render_template("place.html")

if request.method == "POST":

    sqliteConnection = sqlite3.connect('finance.db')
    cursor = sqliteConnection.cursor()

    placing = "INSERT INTO food (category, title, description, shipping, photo, county, area, post_time, uid) VALUES (?,?,?,?,?,?,?,CURRENT_TIMESTAMP,?)"
    ad_photo = convertToBinaryData(request.form.get("photo"))

    # Convert data into tuple format
    data_tuple = ((request.form.get("category"), request.form.get("title"), request.form.get("description"), request.form.get("option[]"), ad_photo, request.form.get("county"), request.form.get("area"), session["user_id"]))
    cursor.execute(placing, data_tuple)
    sqliteConnection.commit()
    print("Image and file inserted successfully as a BLOB into a table")

    sqliteConnection = sqlite3.connect('finance.db')
    cursor = sqliteConnection.cursor()
    query = cursor.execute("SELECT * FROM food ORDER BY post_time DESC LIMIT 1")

    for row in query:
        pic = row[4]
        writeTofile(pic, "dan.jpg")
    sqliteConnection.commit()
    cursor.close()

return render_template("placed.html")