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 反序列化
如何将 Json 数据从 javaScript 发送到 Flask