【问题标题】:Flask sqlalchemy updating multiple fields in a rowFlask sqlalchemy 连续更新多个字段
【发布时间】:2020-06-10 17:40:37
【问题描述】:

最近从 expressjs 移至烧瓶。 我正在使用flask flask-sqlalchemy flask-wtf 创建一个烧瓶应用程序

这是一个繁重的应用程序。我预计会有大约 30-50 个表单,每个表单有 20-100 个字段。

客户端表单使用flask-wtf

我能够创建模型并能够创建 crud 功能。问题是每个表格我都必须手动完成

在创建中 [...]

# 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。

感谢您的宝贵时间

【问题讨论】:

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


    【解决方案1】:

    使用“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()
    

    【讨论】:

    • 谢谢,我会试试这个并报告
    猜你喜欢
    • 2010-12-21
    • 2016-11-05
    • 1970-01-01
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多