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.