部分数据在添加到会话和提交烧瓶时会丢失

时间:2016-07-27 08:34:18

标签: python mysql session flask flask-sqlalchemy

模型是

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    artistname = db.Column(db.String(64))
    photourl = db.Column(db.String(1000))
    contactInfo = db.Column(db.String(20))
    description = db.Column(db.String(500))
    date = db.Column(db.Date)
    def __repr__(self):
        return '<User %r>' % (self.photourl)

这里photourl是张贴照片的网址。

表单提交后。

user = User(artistname = form.artist.data,photourl = "",
            description = form.description.data,contactInfo = form.contactinfo.data,date = datetime.datetime.utcnow().date() )

我在没有photourl的情况下添加了所有细节。

现在我列出下面代码中存储在 filename 变量中的所有文件名。并在中间加入*。

filename = "*".join(filename)
print(filename)

样本输出出现在打印文件名的终端

mic16.jpg*nepal_earthquake_death6.png

合并所有文件名后。我将它存储在数据库中。

user.photourl = filename
print(user)
db.session.add(user)
db.session.commit()

此处终端用户的打印输出为

<User u'mic16.jpg*nepal_earthquake_death6.png'>

表示正确加载了信息。

现在当我执行 db.session.add(user)后跟db.session.commit()。在photourl列下的数据库的用户表中,只有mic16.jpg部分是零件的存储和其余部分被省略即存储*之前的部分。

数据库中没有条目。我的数据库是否是MYSQL数据库并使用phpmyadmin。我正在使用。

阅读数据库
posts = User.query.order_by(User.date.desc()).limit(5).all()
photourls = []
for i in posts:
    photourls.append(i.photourl.split('*'))

所需的网址应该在photourls中。但每个帖子只有单个网址

我只是想到了,并不知道最近发生了什么?

1 个答案:

答案 0 :(得分:1)

根据photourl字符串的大小判断,您希望将多个图像文件名保存在由星号*分隔的字符串中。更好的选择是将文件名存储在JSON数组中,每个文件名都作为字符串。

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    artistname = db.Column(db.String(64))
    photourls = db.Column(JSON)

您可以使用getlist一次上传多个图片文件。

def upload():
    uploaded_images = flask.request.files.getlist("file")

JSON将按如下所示进行存储。

{
    "photourls":["mic16.jpg", "nepal_earthquake_death6.png"]
}