【发布时间】:2020-09-29 23:00:23
【问题描述】:
我正在使用 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":
我已经尝试了以下四个选项,但它们都不起作用。
'''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(数据) TypeError:需要一个类似字节的对象,而不是'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(数据) TypeError:需要一个类似字节的对象,而不是'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 是“无效或不受支持的图像格式”
'''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:需要一个类似字节的对象,而不是“元组”
【问题讨论】:
-
如果假设它是二进制 blob,那么将其转换为 utf8 是很奇怪的
-
当我写
row = db.execute('SELECT * FROM food') writeTofile(row[0], "dan.jpg")时,我得到一个TypeError: a bytes-like object is required, not 'dict'错误,这就是为什么我认为它可能是括号以及为什么我尝试了utf-8。 -
略读文档,看起来您应该使用
fetchone()方法从db.execute()返回的游标中获取一行?然后从中获取适当的列值?我对python不是很熟悉。 -
是的,我和fetchall()都试过了,还是搞不明白。
标签: python-3.x sqlite binary blob