Path: ...!3.eu.feeder.erje.net!feeder.erje.net!weretis.net!feeder8.news.weretis.net!proxad.net!feeder1-2.proxad.net!fdn.fr!news.ortolo.eu!news.izac.org!reader From: Benoit Izac Newsgroups: fr.comp.lang.python Subject: Re: Transformer une BD .sqlite en .js avec python version 3.8 Date: Mon, 09 May 2022 16:19:37 +0200 Message-ID: <87r1523i12.fsf@izac.org> References: <871qx34yrn.fsf@izac.org> Reply-To: benoit.izac@free.fr Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Injection-Info: keg.izac.org; logging-data="1062954"; mail-complaints-to="usenet@izac.org" Bytes: 2821 Lines: 60 Bonjour, Le 09/05/2022 à 08:06, msamandine a écrit dans le message  : >> SELECT nb_enfants, genre, >> SUM(CASE WHEN articles = 1 THEN nb END) '1_article', >> SUM(CASE WHEN articles = 2 THEN nb END) '2_articles', >> SUM(CASE WHEN articles = 3 THEN nb END) '3_articles', >> SUM(CASE WHEN articles = 4 THEN nb END) '4_articles' >> FROM ( >> SELECT nb_enfants, genre, articles, count(*) nb >> FROM t >> GROUP BY nb_enfants, genre, articles >> ) >> GROUP BY nb_enfants, genre; > > Merci pour cette solution. Par contre, je cherchais un bout de code > qui puisse générer ce genre de table automatiquement, sans que l'on > précise à chaque fois "article = 4", article = 3, etc. En effet, la BD > que j'ai mis en ligne n'est qu'un extrait. En réalité, j'ai plus de > 900 entrées. Est-il possible d'automatiser ce morceau de code ? > > Et, pour ce qui est de Python, c'est juste que j'intègre ensuite ce > bout de code à mon code Python :) À ma connaissance sqlite n'a pas de fonction pivot ou crosstab donc autant le faire en python (pas super testé donc à corriger si nécessaire) : import sqlite3 con = sqlite3.connect('test.sqlite3') cur = con.cursor() sep = '|' d = {} max_articles = 0 for nb_enfants, genre, articles, nb in cur.execute(''' SELECT nb_enfants, genre, articles, count(*) nb FROM t GROUP BY nb_enfants, genre, articles'''): if articles > max_articles: max_articles = articles d.setdefault((nb_enfants, genre), {})[articles] = nb print('nb_enfants', 'genre', sep=sep, end=sep) for i in range(max_articles): print(f'{i+1}_article{"s" if i+1 > 1 else ""}', end=sep) print() for k, v in d.items(): nb_enfants, genre = k print(nb_enfants, genre, sep=sep, end=sep) for i in range(max_articles): print(v.get(i+1, 0), end=sep) print() Là c'est juste de l'affichage mais je pense que tu pourrais directement générer ton graphique. -- Benoit Izac