【问题标题】:How to save multi images into database in Flask?如何在 Flask 中将多张图像保存到数据库中?
【发布时间】:2017-06-01 19:29:52
【问题描述】:

我想将多张图片上传到数据库中,我已经创建了表单,并且正在完美上传所有图片。

在我看来,我创建了一个 list 来包含所有图像,如果我将列表保存在数据库中的 images 列中,我得到的是字典而不是包含所有图像的列表像这样一个一个:

{u'123.jpg',u'123.jpg',u'123.jpg'}

问题是如果我想通过索引获取它们,我得到的是字母而不是值。

另一种方式,我创建了另一个dict,所以我可以通过键或值获取它们,但是当它们保存在数据库中时,会引发此错误:

ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 'dict'

代码如下:

@master_route.route('/product/add', methods=['GET', 'POST'])
@login_required
def index():

    form = AddProduct()
    user = User.query.filter_by(id=current_user.id).first()
    imagesList = []

    if request.method == 'POST' and 'image[]' in request.files:
        if form.validate_on_submit():
            product = Goods()
            file = request.files.getlist("image[]")
            for zipfile in file:
                filename = zipfile.filename.split('/')[0]
                zipfile.save(os.path.join(UPLOAD_FOLDER, filename))
                imagesList.append(filename)

            product.images = imagesList[]
            db.session.add(product)
            db.session.commit()

            flash('Images Uploaded', 'success')
            return redirect(url_for('master.index'))

    else:
        return render_template('add-product.html', form=form)
    return render_template('add-product.html', form=form, action='add')

有没有办法将它们保存为列表,以便我可以通过索引或字典获取它们,请帮助??

更新

我可以通过为每个图像创建列并通过索引获取每个图像然后将其提交到数据库来解决问题,但我会尽可能多地尝试干燥我的代码!!

型号

class Goods(db.Model):
    id = db.Column(db.Integer(), primary_key=True)
    product_name = db.Column(db.String())
    sizes = db.Column(db.String())
    hex_color = db.Column(db.String())
    text_color = db.Column(db.String(), server_default='white')
    tkan = db.Column(db.String())
    description = db.Column(db.Text())
    ordered = db.Column(db.Integer(), default=0)
    viewed = db.Column(db.Integer(), default=0)
    published = db.Column(db.DateTime(), default=datetime.utcnow)
    article = db.Column(db.Integer(), server_default='12345')
    age = db.Column(db.String())
    slug = db.Column(db.String())
    price = db.Column(db.Integer(), default=1000)

    images = db.Column(db.String(), nullable=True)
    # image1 = db.Column(db.String(), nullable=True, server_default='404')
    # image2 = db.Column(db.String(), nullable=True, server_default='404')
    # image3 = db.Column(db.String(), nullable=True, server_default='404')
    # image4 = db.Column(db.String(), nullable=True, server_default='404')
    # image5 = db.Column(db.String(), nullable=True, server_default='404')

    user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
    cat_id = db.Column(db.Integer, db.ForeignKey('category.id'))
    sub_id = db.Column(db.Integer, db.ForeignKey('sub.id'))
    # subs = db.relationship('Sub', backref='user', lazy='dynamic', passive_deletes=True)
    # categories = db.relationship('Category', backref='user', lazy='dynamic', passive_deletes=True)
    comments = db.relationship('Comments', backref='goods', lazy='dynamic', passive_deletes=True)

    def slug_this(self, value):
        self.slug = slugify(value)

    def __repr__(self):
        return "Product: {}".format(self.product_name)

【问题讨论】:

  • 大家有什么建议!!
  • 你能显示模型定义的代码吗?
  • 是的,您可以在更新中找到它。
  • 你可以在postgresql中尝试json列类型。或者您可以将列表字符串表示形式保存到图像字段。当您选择它们​​时,您可以使用eval() 将字符串转换为列表。
  • 您能详细解释一下吗? ,您的意思是json 为图像制作序列化程序??

标签: python flask flask-sqlalchemy


【解决方案1】:

问题得到解决,@stamaimer 提到的是我需要将 imageList 转换为字符串列表,我确实这样做了,当列表保存在数据库中时,列表被转换为unicode 列表,为了解决这个问题,我应该使用 eval() 函数将它们转换为列表。

现在一切正常:| ,谢谢@stamaimer。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-17
    • 1970-01-01
    • 2020-11-30
    • 2015-01-08
    • 2013-02-09
    • 2020-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多