Re: Transformer une BD .sqlite en .js avec python version 3.8

Liste des GroupesRevenir à fcl python 
Sujet : Re: Transformer une BD .sqlite en .js avec python version 3.8
De : use.reply.to (at) *nospam* INVALID.ADDRESS (Benoit Izac)
Groupes : fr.comp.lang.python
Date : 09. May 2022, 16:19:37
Autres entêtes
Message-ID : <87r1523i12.fsf@izac.org>
References : 1 2 3
Bonjour,

Le 09/05/2022 à 08:06, msamandine a écrit dans le message
<bdidnQWQmvHJMuX_nZ2dnUU7_8zNnZ2d@giganews.com> :

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

Date Sujet#  Auteur
7 May 22 * Transformer une BD .sqlite en .js avec python version 3.810msamandine
8 May 22 +* Re: Transformer une BD .sqlite en .js avec python version 3.83yves
9 May 22 i`* Re: Transformer une BD .sqlite en .js avec python version 3.82msamandine
9 May 22 i `- Re: Transformer une BD .sqlite en .js avec python version 3.81yves
8 May 22 +* Re: Transformer une BD .sqlite en .js avec python version 3.82yves
8 May 22 i`- Re: Transformer une BD .sqlite en .js avec python version 3.81yves
8 May 22 `* Re: Transformer une BD .sqlite en .js avec python version 3.84Benoit Izac
9 May 22  `* Re: Transformer une BD .sqlite en .js avec python version 3.83msamandine
9 May 22   +- Re: Transformer une BD .sqlite en .js avec python version 3.81yves
9 May 22   `- Re: Transformer une BD .sqlite en .js avec python version 3.81Benoit Izac

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal