SQLAlchemy ORM - aktualizowanie obiektów
W tym rozdziale zobaczymy, jak zmodyfikować lub zaktualizować tabelę żądanymi wartościami.
Aby zmodyfikować dane określonego atrybutu dowolnego obiektu, musimy przypisać mu nową wartość i zatwierdzić zmiany, aby zmiana była trwała.
Pobierzmy obiekt z tabeli, której identyfikator klucza podstawowego znajduje się w naszej tabeli Klienci o identyfikatorze = 2. Możemy użyć metody sesji get () w następujący sposób -
x = session.query(Customers).get(2)
Możemy wyświetlić zawartość wybranego obiektu za pomocą poniższego kodu -
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
Z tabeli naszych klientów powinno zostać wyświetlone następujące wyjście -
Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]
Teraz musimy zaktualizować pole Adres, przypisując nową wartość, jak podano poniżej -
x.address = 'Banjara Hills Secunderabad'
session.commit()
Zmiana zostanie trwale odzwierciedlona w bazie danych. Teraz pobieramy obiekt odpowiadający pierwszemu wierszowi w tabeli za pomocąfirst() method w następujący sposób -
x = session.query(Customers).first()
Spowoduje to wykonanie następującego wyrażenia SQL -
SELECT customers.id
AS customers_id, customers.name
AS customers_name, customers.address
AS customers_address, customers.email
AS customers_email
FROM customers
LIMIT ? OFFSET ?
Powiązanymi parametrami będą odpowiednio LIMIT = 1 i OFFSET = 0, co oznacza, że zostanie wybrany pierwszy wiersz.
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
Teraz wynik dla powyższego kodu wyświetlającego pierwszy wiersz jest następujący:
Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]
Teraz zmień atrybut nazwy i wyświetl zawartość za pomocą poniższego kodu -
x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
Wynik powyższego kodu to -
Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]
Mimo że zmiana jest wyświetlana, nie jest zatwierdzona. Możesz zachować wcześniejszą trwałą pozycję za pomocąrollback() method z poniższym kodem.
session.rollback()
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)
Zostanie wyświetlona oryginalna zawartość pierwszego rekordu.
W przypadku aktualizacji zbiorczych będziemy używać metody update () obiektu Query. Spróbujmy podać przedrostek „Mr.” nazwać w każdym wierszu (z wyjątkiem ID = 2). Odpowiednia instrukcja update () jest następująca -
session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)
The update() method requires two parameters as follows −
Słownik par klucz-wartość, w którym klucz to atrybut do zaktualizowania, a wartość to nowa zawartość atrybutu.
atrybut synchronize_session zawierający wzmiankę o strategii aktualizowania atrybutów w sesji. Poprawne wartości to false: aby nie synchronizować sesji, fetch: wykonuje zapytanie wybierające przed aktualizacją w celu znalezienia obiektów, które są zgodne z zapytaniem aktualizującym; i oceniaj: oceniaj kryteria obiektów w sesji.
Trzy z czterech wierszy w tabeli będą miały nazwę z przedrostkiem „Pan”. Jednak zmiany nie zostaną zatwierdzone i dlatego nie zostaną odzwierciedlone w widoku tabeli SQLiteStudio. Zostanie odświeżony dopiero po zatwierdzeniu sesji.