SQLAlchemy ORM - Mise à jour des objets

Dans ce chapitre, nous verrons comment modifier ou mettre à jour le tableau avec les valeurs souhaitées.

Pour modifier les données d'un certain attribut de n'importe quel objet, nous devons lui attribuer une nouvelle valeur et valider les modifications pour rendre la modification persistante.

Récupérons un objet de la table dont l'identifiant de clé primaire, dans notre table Clients avec ID = 2. Nous pouvons utiliser la méthode get () de session comme suit -

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

Nous pouvons afficher le contenu de l'objet sélectionné avec le code ci-dessous -

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

À partir de la table de nos clients, la sortie suivante doit être affichée -

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

Nous devons maintenant mettre à jour le champ Adresse en attribuant une nouvelle valeur comme indiqué ci-dessous -

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

Le changement sera systématiquement reflété dans la base de données. Maintenant, nous récupérons l'objet correspondant à la première ligne du tableau en utilisantfirst() method comme suit -

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

Cela exécutera l'expression SQL suivante -

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 ?

Les paramètres liés seront respectivement LIMIT = 1 et OFFSET = 0, ce qui signifie que la première ligne sera sélectionnée.

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

Maintenant, la sortie pour le code ci-dessus affichant la première ligne est la suivante -

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

Maintenant, changez l'attribut de nom et affichez le contenu en utilisant le code ci-dessous -

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

La sortie du code ci-dessus est -

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

Même si la modification est affichée, elle n'est pas validée. Vous pouvez conserver la position persistante précédente en utilisantrollback() method avec le code ci-dessous.

session.rollback()

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

Le contenu original du premier enregistrement sera affiché.

Pour les mises à jour en masse, nous utiliserons la méthode update () de l'objet Query. Essayons de donner un préfixe, «M.» à nommer dans chaque ligne (sauf ID = 2). L'instruction update () correspondante est la suivante -

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

The update() method requires two parameters as follows −

  • Un dictionnaire de valeurs-clés dont la clé est l'attribut à mettre à jour et la valeur le nouveau contenu de l'attribut.

  • Attribut synchronize_session mentionnant la stratégie de mise à jour des attributs dans la session. Les valeurs valides sont false: pour ne pas synchroniser la session, fetch: effectue une requête de sélection avant la mise à jour pour trouver les objets qui correspondent à la requête de mise à jour; et évaluer: évaluer les critères sur les objets de la session.

Trois des quatre lignes du tableau auront le nom préfixé par «M.». Cependant, les modifications ne sont pas validées et ne seront donc pas reflétées dans la vue de table de SQLiteStudio. Il ne sera actualisé que lorsque nous validons la session.