query = QtSql.QSqlQuery()
query.prepare(''' DELETE
FROM books
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre",self.livres[indiceLivre].idLivre)
query.exec_()
self.beginRemoveRows(QModelIndex(),indiceLivre,indiceLivre)
del self.livres[indiceLivre]
self.endRemoveRows()
On crée ici une requête DELETE en lui passant l'identificateur du livre à supprimer dans
la condition WHERE. Attention : cet identificateur n'est pas indiceLivre, qui est
l'indice du livre dans le tableau du modèle en mémoire. Pour retrouver l'identificateur
du livre à supprimer, il faut d'abord retrouver l'objet livre dans le modèle et ensuite
extraire l'attribut identificateur : c'est le sens de l'expression
self.livres[indiceLivre].idLivre.
Pour terminer, voici la méthode remplaceLivre mise à jour (les deux dernières
instructions sont inchangées) :
def remplaceLivre(self,indiceLivre,livre):
query = QSqlQuery()
query.prepare(''' UPDATE books
SET title = :titre,
author = :auteur,
publisher = :editeur,
genre_id = :idGenre,
year = :annee,
summary = :resume,
price = :prix
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre", self.livres[indiceLivre].idLivre)
query.bindValue(":titre", livre.titre)
query.bindValue(":auteur", livre.auteur)
query.bindValue(":editeur", livre.editeur)
query.bindValue(":idGenre",self.idGenres[livre.genre])
query.bindValue(":annee", livre.annee)
query.bindValue(":resume", livre.resume)
query.bindValue(":prix", livre.prix)
query.exec_()
self.livres[indiceLivre] = livre
self.dataChanged.emit(self.createIndex(indiceLivre,0),
self.createIndex(indiceLivre,2))
Comme on ne sait pas a priori quels champs ont changé, on fait un UPDATE sur tous les
champs, sauf (bien sûr) l'identificateur du livre qui est indiqué dans la condition WHERE.
168
query.prepare(''' DELETE
FROM books
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre",self.livres[indiceLivre].idLivre)
query.exec_()
self.beginRemoveRows(QModelIndex(),indiceLivre,indiceLivre)
del self.livres[indiceLivre]
self.endRemoveRows()
On crée ici une requête DELETE en lui passant l'identificateur du livre à supprimer dans
la condition WHERE. Attention : cet identificateur n'est pas indiceLivre, qui est
l'indice du livre dans le tableau du modèle en mémoire. Pour retrouver l'identificateur
du livre à supprimer, il faut d'abord retrouver l'objet livre dans le modèle et ensuite
extraire l'attribut identificateur : c'est le sens de l'expression
self.livres[indiceLivre].idLivre.
Pour terminer, voici la méthode remplaceLivre mise à jour (les deux dernières
instructions sont inchangées) :
def remplaceLivre(self,indiceLivre,livre):
query = QSqlQuery()
query.prepare(''' UPDATE books
SET title = :titre,
author = :auteur,
publisher = :editeur,
genre_id = :idGenre,
year = :annee,
summary = :resume,
price = :prix
WHERE book_id = :idLivre ''')
query.bindValue(":idLivre", self.livres[indiceLivre].idLivre)
query.bindValue(":titre", livre.titre)
query.bindValue(":auteur", livre.auteur)
query.bindValue(":editeur", livre.editeur)
query.bindValue(":idGenre",self.idGenres[livre.genre])
query.bindValue(":annee", livre.annee)
query.bindValue(":resume", livre.resume)
query.bindValue(":prix", livre.prix)
query.exec_()
self.livres[indiceLivre] = livre
self.dataChanged.emit(self.createIndex(indiceLivre,0),
self.createIndex(indiceLivre,2))
Comme on ne sait pas a priori quels champs ont changé, on fait un UPDATE sur tous les
champs, sauf (bien sûr) l'identificateur du livre qui est indiqué dans la condition WHERE.
168
