本站消息

站长简介


前每日优鲜python全栈开发工程师,自媒体达人,逗比程序猿,钱少话少特宅,我的公众号:想吃麻辣香锅

  python大神匠心打造,零基础python开发工程师视频教程全套,基础+进阶+项目实战,包含课件和源码

  出租广告位,需要合作请联系站长



+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

无法使用sqlalchemy从flask数据库中存储和获取图像

发布于2021-05-07 06:45     阅读(757)     评论(0)     点赞(1)     收藏(4)


0

1

2

3

4

5



我已经创建并配置了数据库,并且能够发布除图像或文件之外的数据,并且能够获取那些数据,但是无法获取图像数据。我收到此错误

> UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position
> 0: invalid start byte

这是我的代码:

from app import app, api, db, ma, Resource, request, images_schema, image_schema, ImageData, json, jsonify
import base64
from base64 import b64encode



class AllImage(Resource):
    def get(self):
        images = ImageData.query.all()
        print(images)
        return images_schema.dump(images)
    def post(self):
        if 'image' in request.files:
            imagedata = request.files['image']
            imageD = imagedata.filename
            imageD = imagedata.read()
        image = ImageData(
            uname = request.form['uname'],
            fname = request.form['fname'],
            lname = request.form['lname'],
            email = request.form['email'],
            # image = base64.b64encode(imageD)
            image= imageD
        )

        db.session.add(image)
        db.session.commit()
        # return image_schema.dump(image)
        print(type(image))
        # return "success"
        return image_schema.dump(image)


api.add_resource(AllImage,'/image/data')

这是我的数据库配置

from flask import Flask, json, jsonify, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow # new
from flask_restful import Api, Resource # new
from flask_cors import CORS
import datetime


app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///image.db'

db = SQLAlchemy(app)
ma = Marshmallow(app)
api = Api(app)
CORS(app, resources={r"/loan/*": {"origins": "*"}})

class ImageData(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    uname = db.Column(db.VARCHAR(20), nullable = True, unique=True)
    fname = db.Column(db.VARCHAR(20), nullable = True)
    lname = db.Column(db.VARCHAR(20), nullable = True)
    email = db.Column(db.VARCHAR(50), nullable = True, unique=True)
    # image = db.Column(db.LargeBinary, nullable=True)
    image =db.Column(db.BLOB)

class ImageDataSchema(ma.Schema):
    class Meta:
        fields = ('id','uname','fname','lname','email','image')


image_schema = ImageDataSchema()
images_schema = ImageDataSchema(many=True)

我尝试了bigbinary和Blob类型,这里我在做什么错?


解决方案


答案有点晚-

您需要按照以下步骤做一些事情

imageD = base64.b64encode(files.read())

但是当您尝试“显示”它时,您的模式很可能会在自动转储/序列化时遇到麻烦。




0

1

2

3

4

5

6

7

8



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:https://www.pythonheidong.com/blog/article/964740/acdf86279874bdbd6fc9/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

1 0
收藏该文
已收藏

评论内容:(最多支持255个字符)