Flask-SQLAlchemy вставить несколько словарь - PullRequest
1 голос
/ 13 октября 2019

У меня есть такая модель:

class Schedule(db.Model):
    __tablename__ = 'schedule'
    id = db.Column(db.Integer, primary_key=True)
    day = db.Column(db.Enum(DayNameList, name='day'))
    start_at = db.Column(db.Time())
    end_at = db.Column(db.Time())

Если вставить один словарь, мы можем использовать таким образом :

time_schedule = {'day': 'Wednesday', 'end_at': '03:00', 'start_at': '02:00'}
schedule = Schedule(**time_schedule)
db.session.add(schedule)
db.session.commit()

Теперь я хочу вставить несколькословари в списке. А вот фрагмент моего словаря:

list_of_dict_time_schedule = [{'day': 'Wednesday', 'end_at': '03:00', 'start_at': '02:00'}, {'day': 'Friday', 'end_at': '06:00', 'start_at': '17:01'}]

, и я попытался вставить его так:

dictionary_time_schedule = {}
for data in list_of_dict_time_schedule:
    for key, value in data.items():
        dictionary_time_schedule[key] = value

time_schedule = Schedule(**dictionary_time_schedule)

Но только последний словарь в этом цикле вставлен в мою базу данных, которыйпросто:

{'day': 'Friday', 'end_at': '06:00', 'start_at': '17:01'}

Итак, как вставить несколько словарей из списка в базу данных с помощью Flask-SQLALchemy ..?

РЕДАКТИРОВАТЬ : Я также попробовал это так:

for data in list_of_dict_time_schedule:
    time_schedule = Schedule(day=data['day'], start_at=data['start_at'], end_at=data['end_at'])

Но все то же самое, что и выше, только последний из этих списков циклов вставлен в базу данных.

1 Ответ

1 голос
/ 13 октября 2019

Как указано в комментариях, вам необходимо добавлять каждый новый объект в сеанс. Кроме того, вы можете «автозаполнить» свойства вашего класса, используя метод .from_dict().

schedules = [{'day': 'Wednesday', 'end_at': '03:00', 'start_at': '02:00'}, {'day': 'Friday', 'end_at': '06:00', 'start_at': '17:01'}]
for sched in schedules:
    new_schedule = Schedule().from_dict(sched)
    db.session.add(new_schedule)
db.session.commit()
...