如何在Flask中将多个图像保存到数据库中?

时间:2017-06-01 19:29:52

标签: python flask flask-sqlalchemy

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

在我的观看中,我创建了一个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)

1 个答案:

答案 0 :(得分:0)

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

现在每件事情都很好:| ,谢谢@stamaimer。