эффективная запись представления WTForm в MySQL - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть длинная форма:

т.е.

Question1 = TextAreaField('What is your name?')
...
Question100=TextAreaField('Describe your role')

Когда пользователь отправляет форму, Flask получает данные для каждого вопроса:

т.е.

Question1=form.Question1.data
..
Question100=form.Question100.data

Затем я записываю данные в БД с использованием sql, т.е.

cursor.executve("INSERT INTO table (Q1,Q100) values (%s,%s)", (Question1, Question100))

Внедрение SQL не является проблемой, и я не хочу использовать SQLalchemy.Есть ли более эффективный способ сделать это?

РЕДАКТИРОВАТЬ: Предположим, что некоторые типы полей являются FieldLists, Formfields или HiddenFields.Как я могу записать их в таблицу?Как я могу пропустить их в цикле?

1 Ответ

0 голосов
/ 21 сентября 2018

Быстрое и удобочитаемое решение

written_fields = [f for f in form if f.id in WRITE_TO_SQL_FIELDS]
cursor.execute(
    "INSERT INTO table ({}) values ({})".format(
        ",".join(f.id for f in written_fields),
        ",".join(str(f.data) for f in written_fields),
    )
)

или, если вы предпочитаете фильтрацию по типу:

BLACKLISTED_TYPES = (wtforms.FieldList, wtforms.Formfield, wtforms.HiddenField)
written_fields = [f for f in form if not isinstance(f, BLACKLISTED_TYPES)] 
...