Wtforms- запись данных списка полей в MySQL
Предположим, у меня есть такая форма:
Toys= FieldList(TextField('what toys do you have?'),min_entries=5)
Fruits= FieldList(TextField('what fruits do you have?'),min_entries=5)
Jewelry= FieldList(TextField('what jewelries do you have?'),min_entries=5)
Candy= FieldList(TextField('what candies do you have?'),min_entries=5)
без явного определения представленных значений, таких какToy1=form.Toys[1].data
Как я могу объединить все данные FieldList в форме представления для записи в таблицу SQL следующим образом:?
Toys | Fruits | Jewelry | Candy
ball apple Necklace M&Ms
stick orange Bracelet skittles
top grapes tie clip lollipop
Для простоты я установил min_entries=5
для всех полей. Я попытался использовать цикл for для добавления имен столбцов и значений в словарь и записи их в свою базу данных следующим образом:
field_dict=dict()
for f in form:
if str(f.type) in ['FieldList']:
for x in range(1,5):
field_dict.update({f.name:f.data[x]})
sql_insert="INSERT INTO tablename ({}) values ({})".format(
",".join(field_dict.keys()),
",".join('"' + str(value) + '"' for value in field_dict.values()))
c.execute(sql_insert)
Тем не менее, он записывает в базу данных каждый раз, когда он сталкивается с Fieldlist
В результате получается таблица типа:
Toys | Fruits | Jewelry | Candy
ball NULL NULL NULL
ball apple NULL NULL
ball apple Necklace NULL
ball apple Necklace M&Ms
1 ответ
Насколько я понимаю, у вас есть список записей из вашей формы, которые вы хотите объединить в кортеж и вставить в базу данных.
Чтобы избавить меня от набора текста, скажем, у вас есть:
# some list of keys obtained or hard coded as global..
KEYS = ['Toys', 'Fruits', 'Candy']
# and a form in which you have
Toys= FieldList(TextField('what toys do you have?'),min_entries=3)
Fruits= FieldList(TextField('what fruits do you have?'),min_entries=3)
Candy= FieldList(TextField('what candies do you have?'),min_entries=3)
Теперь ваша задача состоит в том, чтобы зациклить форму и упаковать кортеж:
form = Form()
for _i in range(3):
tup = ()
for key in KEYS:
tup += (getattr(form, key)[_i].data,)
sql = "INSERT INTO tablename ({}) values {}".format(
",".join(KEYS), str(tup))
c.execute(sql)
Попробуйте (или какую-нибудь отлаженную производную!) Попробовать