SQLAlchemy ORM - Nesneleri Güncelleme

Bu bölümde, tablonun istenen değerlerle nasıl değiştirileceğini veya güncelleneceğini göreceğiz.

Herhangi bir nesnenin belirli bir niteliğinin verilerini değiştirmek için, ona yeni bir değer atamalı ve değişikliği kalıcı hale getirmek için değişiklikleri uygulamalıyız.

Müşteriler tablomuzda ID = 2 ile birincil anahtar tanımlayıcısı olan tablodan bir nesne getirelim. Get () session metodunu aşağıdaki gibi kullanabiliriz -

x = session.query(Customers).get(2)

Seçilen nesnenin içeriğini aşağıdaki kod ile görüntüleyebiliriz -

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Müşterilerimiz tablosundan aşağıdaki çıktı görüntülenmelidir -

Name: Komal Pande Address: Koti, Hyderabad Email: [email protected]

Şimdi aşağıdaki gibi yeni bir değer atayarak Adres alanını güncellememiz gerekiyor -

x.address = 'Banjara Hills Secunderabad'
session.commit()

Değişiklik sürekli olarak veritabanına yansıtılacaktır. Şimdi tablodaki ilk satıra karşılık gelen nesneyi kullanarakfirst() method aşağıdaki gibi -

x = session.query(Customers).first()

Bu, aşağıdaki SQL ifadesini çalıştıracaktır -

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 ?

Bağlı parametreler sırasıyla LIMIT = 1 ve OFFSET = 0 olacaktır, bu da ilk satırın seçileceği anlamına gelir.

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Şimdi, ilk satırı görüntüleyen yukarıdaki kodun çıktısı aşağıdaki gibidir -

Name: Ravi Kumar Address: Station Road Nanded Email: [email protected]

Şimdi ad özniteliğini değiştirin ve aşağıdaki kodu kullanarak içeriği görüntüleyin -

x.name = 'Ravi Shrivastava'
print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

Yukarıdaki kodun çıktısı -

Name: Ravi Shrivastava Address: Station Road Nanded Email: [email protected]

Değişiklik gösterilse bile taahhüt edilmemiştir. Kullanarak daha önceki kalıcı konumu koruyabilirsinizrollback() method aşağıdaki kod ile.

session.rollback()

print ("Name: ", x.name, "Address:", x.address, "Email:", x.email)

İlk kaydın orijinal içeriği görüntülenecektir.

Toplu güncellemeler için, Query nesnesinin update () yöntemini kullanacağız. Bir önek vermeyi deneyelim, 'Bay' her satıra isim vermek için (ID = 2 hariç). Karşılık gelen update () ifadesi aşağıdaki gibidir -

session.query(Customers).filter(Customers.id! = 2).
update({Customers.name:"Mr."+Customers.name}, synchronize_session = False)

The update() method requires two parameters as follows −

  • Anahtarın güncellenecek öznitelik olduğu ve değerin özniteliğin yeni içeriği olduğu bir anahtar / değer çiftleri sözlüğü.

  • Senkronize_session özelliği, oturumdaki öznitelikleri güncelleme stratejisinden bahseder. Geçerli değerler yanlıştır: oturumu senkronize etmemek için, getir: güncelleme sorgusuyla eşleşen nesneleri bulmak için güncellemeden önce bir seçme sorgusu gerçekleştirir; ve değerlendirin: oturumdaki nesnelerle ilgili kriterleri değerlendirin.

Tablodaki 4 satırdan üçünün önünde 'Bay' olan ada sahip olacaktır. Ancak, değişiklikler kaydedilmez ve bu nedenle SQLiteStudio'nun tablo görünümüne yansıtılmaz. Yalnızca oturumu tamamladığımızda yenilenecektir.