[18] Zmiana atrybutów instancji klasy przed zapisem w sqlalchemy

Jeśli jest zdefiniowany model pyramid z mapowniaem do bazy danych dla klasy w sqlalchemy to instancje tworzy się przez:

zmiennaA = NazwaKlasy(zmienna1=wartość, zmienna2=wartość)

potem zapisać ją można w sesji:

DBSession.add(zmiennaA)
DBSession.commit()

co wprowadza ją trwale do bazy danych.

Czasami jednak nie można zainicjować zmiennejA ze wszystkimi wartościami atrybutów lub trzeba je utworzyć dynamicznie. Wtedy można zainicjować instancję:

zmiennaA = NazwaKlasy()

i dalej zmienić jej artrybuty.

Problem w tym że sqlalchemy zignoruje te modyfikacje i zapisze do bazy danych pusty rekord, beż żadnej wartości (poza domyślnymi).

Można jednak wykorzystać setattr():

setattr(zmiennaA, zmienna1, wartość)

i wtedy wartości zmienionych atrybutów będą zapisane do bazy danych.