URL: https://linuxfr.org/forums/programmation-python/posts/python-sqlite-les-requetes-update-ne-fonctionne-pas Title: Python SQLite: les requêtes update ne fonctionne pas Authors: Skilgannon Date: 2024年02月10日T18:54:06+01:00 License: CC By-SA Tags: python3, python, sqlite, android, catalogue et bibliothèque Score: 0 Bonjour, J'ai créé un script python dont le but est de modifier la basse de données SQLite générée par l'application androïd [MyLibrary](https://play.google.com/store/apps/details?id=com.vgm.mylibrary). Le problème est que au vu des log tout semble fonctionner, les requêtes sql semble bonnes... ``` 2024年02月10日 18:36:59 mypc __main__[14467] DEBUG (238, '[]', 'Le secret des Eïles', 1382, None, None, None, '0', 0, '9782302024380', 48, '05/12/2012', 'Soleil', 1, None, '[{"title":"legende","volume":6.0}]', "Après avoir reconquis son trône et passé quelques mois à remettre les choses en bon ordre, le chevalier Tristan s'aperçoit qu'il n'est pas fait pour régenter une cour. Il l'abandonne alors, choisissant une vie plus proche de la Nature qui l'a vu grandir.Mais ses nuits sont hantées par les Eïles, créatures envoûtantes qui essaient de lui voler son âme pendant son sommeil... Une crainte étrange s'éveille alors en lui, plus inquiétante encore que tous les combats périlleux menés jusqu'alors...", 'Le secret des Eïles', None, None, None) coucou YOLO 2024年02月10日 18:36:59 archbertha __main__[14467] DEBUG UPDATE COMIC SET FNAC_URL = coucou AND AMAZON_URL = yolo AND IS_COMIC = 1 WHERE ID = 238 UPDATE COMIC SET FNAC_URL = coucou AND AMAZON_URL = yolo AND IS_COMIC = 1 WHERE ID = 238 ``` Sauf que quand, après avoir executer le scriptp je vérifie avec un select, rien n'a été modifier dans le base de donnée. ```> $ sqlite3 mylibrary.db 'SELECT * FROM COMIC WHERE ID IS 239;' 239|[]|Les forêts profondes|1383||||0|0|2845657927|48|08/12/2004|Soleil Productions|1||[{"title":"legende","volume":2.0}]||Les forêts profondes|||> $ # Ca devrait etre 239|[]|yolo|1383||||coucou|0|2845657927|48|08/12/2004|Soleil Productions|1||[{"title":"legende","volume":2.0}]||Les forêts profondes||1| ``` Le script est le suivant: ```python #!/usr/bin/env python3 import argparse import logging import pathlib import sqlite3 import coloredlogs class Book: def __init__(self, row) -> None: self.is_comic = "" self.id = row[0] self.additional_authors = row[1] self.amazon_url = row[2] self.author = row[3] self.categories = row[4] self.comments = row[5] self.cover_path = row[6] self.fnac_url = row[7] self.in_wishlist = row[8] self.isbn = row[9] self.pages = row[10] self.published_date = row[11] self.publisher = row[12] self.read = row[13] self.reading_dates = row[14] self.series = row[15] self.summary = row[16] self.title = row[17] self.amazon_small_cover_url = row[18] self.amazon_cover_url = row[19] def correct_amazon_url(self): if not self.amazon_url.startswith("http"): print("YOLO") self.amazon_url = "yolo" def correct_fnac_url(self): if self.fnac_url != "": print("coucou") self.fnac_url = "coucou" def main(args): logger.debug(args) connection = sqlite3.connect(args.db) cursor = connection.cursor() cursor.execute(f"SELECT * FROM {args.table}") for row in cursor.fetchall(): book = Book(row) logger.info("id:" + str(book.id) + ":isbn:" + str(book.isbn)) logger.debug(row) book.correct_fnac_url() book.correct_amazon_url() if args.table == "BOOK": book.is_comic = "0" else: book.is_comic = "1" sql_command = f"UPDATE {args.table} SET FNAC_URL = {book.fnac_url} AND AMAZON_URL = {book.amazon_url} AND IS_COMIC = {book.is_comic} WHERE ID = {book.id} " logger.debug(sql_command) cursor.execute( f"UPDATE {args.table} SET FNAC_URL = ? AND AMAZON_URL = ? AND IS_COMIC = ? WHERE ID = ?", (book.fnac_url, book.amazon_url, book.is_comic, book.id), ) connection.commit() connection.close() if __name__ == "__main__": coversPath = pathlib.Path(pathlib.Path(), "covers") dbPath = pathlib.Path(pathlib.Path(), "mylibrary.db") parser = argparse.ArgumentParser() parser.add_argument( "-v", "--verbose", action="count", help="increase output verbosity", default=0 ) parser.add_argument( "-d", "--db", action="store", help="DB path", type=pathlib.Path, default=dbPath ) parser.add_argument( "-t", "--table", choices=["BOOK", "COMIC"], help="Wich table ?", required=True ) args = parser.parse_args() logger = logging.getLogger(__name__) formatter = logging.Formatter( "%(asctime)s %(hostname)s %(name)s[%(process)d] %(levelname)s %(message)s" ) if not args.verbose: coloredlogs.install(level="ERROR", logger=logger) elif args.verbose == 1: coloredlogs.install(level="WARNING", logger=logger) elif args.verbose == 2: coloredlogs.install(level="INFO", logger=logger) elif args.verbose>= 3: coloredlogs.install(level="DEBUG") else: logging.critical("Log level fail !!!") main(args) ``` Merci par avance. PS: Connaissez vous une application du même style opensource ?

AltStyle によって変換されたページ (->オリジナル) /