【问题标题】:Flask - How to save a JSON data each key to it column [duplicate]Flask - 如何将每个键的JSON数据保存到它的列[重复]
【发布时间】: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)

【问题讨论】:

    标签: python flask sqlalchemy


    【解决方案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

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-02
      • 2020-08-08
      • 2018-09-27
      • 1970-01-01
      • 2019-08-30
      相关资源
      最近更新 更多