Flask - 如何将每个键的JSON数据保存到它的列[重复]

Posted

技术标签:

【中文标题】Flask - 如何将每个键的JSON数据保存到它的列[重复]【英文标题】:Flask - How to save a JSON data each key to it column [duplicate] 【发布时间】:2019-06-24 01:35:53 【问题描述】:

我正在尝试在数据库中自动保存 JSON 数据,但每个键都应该保存在它的列中:

class Users(UserMixin, db.Model):
    __tablename__ = 'users'

    id = db.Column(db.Integer(), primary_key=True)
    firstname = db.Column(db.String(100))
    lastname = db.Column(db.String(100))
    email = db.Column(db.String(120), unique=True)
    telephone = db.Column(db.String(15))
    fullname = db.Column(db.String(100))
    address1 = db.Column(db.String(100))
    city = db.Column(db.String(50))
    country = db.Column(db.String(50))
    region = db.Column(db.String(50))

JSON数据如下:

user_info = 
    'firstname': 'Test1', 
    'lastname': 'Test2', 
    'telephone': '1234567890', 
    'city': 'City 1', 
    'email': 'example@gmail.com', 
    'address1': 'Address', 
    'country': 'America', 
    'region': 'Whatever'

有什么办法可以自动化,比如:

user = Users.query.save(user_info)

【问题讨论】:

【参考方案1】:

如果你只有匹配的字段,你可以使用:

user = Users(**user_info)

这会创建一个新用户。看看这个:https://docs.python.org/3/tutorial/controlflow.html#unpacking-argument-lists

如果你想用新数据更新用户,你可以使用:

Users.query.get(user_id).update(**user_info)
db.session.commit()

【讨论】:

所以我要做的就是解压缩参数并将它们与列匹配,例如Users.query.filter_by(**user_info) 然后提交? 我只是在创建一个用户对象而不是保存数据,对吗? 用户每天都在更改那里的配置文件,我不愿意每次都做 if 语句来检查该值是否存在然后这样做,更好的做法是保存更改,我认为 @ 987654325@ 帮助一些地方! 我在上面的答案中添加了。您可以使用@classmethod,但如果您只是更新数据,这有点矫枉过正,因为 sqlalchemy 有很多内置函数。【参考方案2】:

这就像喝水一样容易。

user = Users.query.filter_by(id=current_user.id)

user.update(data, synchronize_session=False)
db.session.commit()

How to update sqlalchemy orm object by a python dict

More about synchronize_session

【讨论】:

以上是关于Flask - 如何将每个键的JSON数据保存到它的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将 JSON 响应保存为变量以使用 SwiftyJSON 反序列化

Laravel如何将对象返回为没有键的JSON数组数据类型

如何将 Json 数据从 javaScript 发送到 Flask

如何将 json 输出保存在 String 对象中。重复数据写入所有拆分的文件中?

如何将 JSON 对象传递给 Flask 中的模板?

如何保存具有元组键的字典