烧瓶sqlalchemy连续更新多个字段

时间:2020-06-10 17:40:37

标签: python-3.x flask flask-sqlalchemy

最近从expressjs移至flask。 我正在使用flask flask-sqlalchemy flask-wtf

创建Flask应用

这是一个形式繁重的应用程序。我希望大约有30-50个表单,每个表单有20-100个字段。

客户端表单正在使用flask-wtf

我能够创建模型并能够创建原始功能。问题在于,对于每种表格,我都必须手动进行

创建 [...]

# after validation
someItem = SomeModel(someField1=form.someField1.data, ..., somefieldN = form.someFieldN.data)
db.session.add(someItem) 
db.session.commit() 

更新

[....]
queryItem = SomeModel.query.filter_by(id=item_id)
queryItem.somefield1 = form.someField1.data
[...]
queryItem.somefieldN = form.someFieldN.data

db.session.commit() 

很明显,有很多形式,它变得非常乏味。有没有办法 如果您能够建议一个可以做到这一点的图书馆 我在网上搜索了最近几个小时。我最接近的是创建字典,然后像这样传递它

someDict = {'someField1': form.someField1.data, ....}
SomeModel.query.filter_by(id=item.id).update(someDict)

如您所见,它同样乏味

我希望找到一种将表单数据直接传递到SomeModel进行创建和更新的方法。 我以前使用过expressjs + knex,经过验证后,我只能将req.body传递给knex。

感谢您的时间

1 个答案:

答案 0 :(得分:0)

使用“ populate_obj”(注意:模型字段名称必须与表单字段匹配)

创建记录:

someItem = SomeModel()
form.populate_obj(someItem)
db.session.add(someItem)
db.session.commit()

更新记录:

queryItem = SomeModel.query.filter_by(id=item_id)
form.populate_obj(queryItem)
db.session.commit()