динамически вставлять строки в колбу таблицы sqlalchemy

Я хочу динамически вставлять новые строки в таблицу sql в SQLAlchemy.

Я в основном хочу сделать это, но вместо того, чтобы делать это с помощью 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()

Я видел пару дискуссий по этому поводу и создания экземпляра всего класса, а не атрибута объекта, но, похоже, я не могу применить это к этой проблеме.

Спасибо за любую помощь.


person Ryan Skene    schedule 27.11.2017    source источник


Ответы (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()
person leovp    schedule 27.11.2017
comment
Благодарю. это удобная функция. обратите внимание, мне пришлось добавить foreign_key и значение к объекту базы данных перед заполнением. contact_info=UserContactInfo(id=user_id) - person Ryan Skene; 27.11.2017