【问题标题】:dynamically insert rows to table flask sqlalchemy动态地将行插入到表烧瓶 sqlalchemy
【发布时间】:2017-11-27 01:32:24
【问题描述】:

我想在 SQLAlchemy 中动态向 sql 表中插入新行。

我基本上想做this,但我不想用UPDATE,而是用INSERT。

我正在使用 Flask 和 WTForms。

现在,我必须添加一个这样做的新用户:

if form.validate_on_submit():
    contact_info = UserContactInfo(street_number=form.street_number.data,
                                   street_address = form.street_address.data,
                                   unit_number = form.unit_number.data
                                  )
    db.session.add(contact_info)
    db.session.commit()

如果我可以遍历插入,我将能够更轻松地向 UserContactInfo 添加新属性。

我已经尝试过这样做,但没有对数据库进行任何更改。

form = ContactInfoForm()
contact_info = UserContactInfo()

if form.validate_on_submit():
    table_obj_members = get_attributes(UserContactInfo())
        for aa in table_obj_members:
             form_data = getattr(form, aa).data
             setattr(contact_info, aa, form_data)

 db.session.commit()

我已经看到一些关于这个问题的讨论并实例化整个类而不是对象属性,但我似乎无法将其应用于这个问题。

感谢您的帮助。

【问题讨论】:

    标签: flask sqlalchemy setattr


    【解决方案1】:

    在您的第二个示例中,您忘记在提交之前将修改后的对象添加到会话中。
    WTForms 中有一个函数完全符合您的描述:populate_obj() [1]。

    例子:

    if form.validate_on_submit():
        contact_info = UserContactInfo()
        form.populate_obj(contact_info)
    
        db.session.add(contact_info)
        db.session.commit()
    

    【讨论】:

    • 谢谢。这是一个方便的功能。注意我必须在填充之前将 foreign_key 和 value 添加到数据库对象。 contact_info=UserContactInfo(id=user_id)
    猜你喜欢
    • 2013-11-22
    • 2021-07-19
    • 2012-12-29
    • 2021-04-10
    • 2018-12-09
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2020-05-31
    相关资源
    最近更新 更多