Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用SQLAlchemy,如何仅使用json更新数据库?_Sqlalchemy - Fatal编程技术网

使用SQLAlchemy,如何仅使用json更新数据库?

使用SQLAlchemy,如何仅使用json更新数据库?,sqlalchemy,Sqlalchemy,一些 { “id”:1, “foo”:“foo”, “酒吧”:“酒吧”, “baz”:“baz” } 假设some_json中的所有键都是列 然后通常当我更新数据库时, 我会做类似的事情 item=db.query.filter_by(id=some_json['id']).first() 如果项目: item.foo=some_json['foo'] item.bar=some_json['bar'] item.baz=some_json['baz'] db.session.add(项) d

一些

{
“id”:1,
“foo”:“foo”,
“酒吧”:“酒吧”,
“baz”:“baz”
}
假设
some_json
中的所有键都是列

然后通常当我更新数据库时, 我会做类似的事情

item=db.query.filter_by(id=some_json['id']).first()
如果项目:
item.foo=some_json['foo']
item.bar=some_json['bar']
item.baz=some_json['baz']
db.session.add(项)
db.commit()
然而,如果你有越来越多的钥匙,这显然是乏味的
是否有一种简单地通过传递json更新表行的更简单方法?

通过将
json
转换为dectionery,这将映射表模型
table\u model
,在您的情况下,您可以按如下方式编写代码:

a= {
    "id": 1,
    "foo": "foo",
    "bar": "bar",
    "baz": "baz"
    }
item = table_model.query.filter_by(id=some_json['id']).first()
if item:
    item=table_model(**a)
    db.session.add(item)
    db.commit()

如果
isinstance(some_json,dict)
True
,那么您可以尝试将
some_json
作为参数值传递给
insert()
语句,例如
db.session.execute(item.\u表插入(),some_json)
您应该能够执行
instance=MyModel(**json dict);db.add(instance)
如果
json_dict
是一个平面
dict
,其键与
MyModel
中的列名匹配。如果需要更复杂的数据处理,可以使用类似
棉花糖sqlalchemy
库的东西。Marshmallow允许您从json或字典快速加载orm对象。您还可以在某些ORM属性(列)上定义预加载/后加载函数,以便对传入的数据进行处理。例如,您可以定义一个预加载函数,在保存密码之前对密码进行加密。在构建标准RESTAPI时非常有用,其中前端和后端之间传递的json通常只是数据库orm对象的json映射。