Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > fr.comp.lang.python > #3859
| From | Benoit Izac <use.reply.to@INVALID.ADDRESS> |
|---|---|
| Newsgroups | fr.comp.lang.python |
| Subject | Re: Transformer une BD .sqlite en .js avec python version 3.8 |
| Date | 2022-05-09 16:19 +0200 |
| Message-ID | <87r1523i12.fsf@izac.org> (permalink) |
| References | <UNydnQ0sEcMoaej_nZ2dnUU7_83NnZ2d@giganews.com> <871qx34yrn.fsf@izac.org> <bdidnQWQmvHJMuX_nZ2dnUU7_8zNnZ2d@giganews.com> |
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
Back to fr.comp.lang.python | Previous | Next — Previous in thread | Find similar
Transformer une BD .sqlite en .js avec python version 3.8 msamandine <nospam_amsmarie8@gmail.com.invalid> - 2022-05-06 23:25 -0500
Re: Transformer une BD .sqlite en .js avec python version 3.8 yves <yves@free.invalid> - 2022-05-08 14:01 +0000
Re: Transformer une BD .sqlite en .js avec python version 3.8 msamandine <nospam_amsmarie8@gmail.com.invalid> - 2022-05-08 23:57 -0500
Re: Transformer une BD .sqlite en .js avec python version 3.8 yves <yves@free.invalid> - 2022-05-09 08:33 +0000
Re: Transformer une BD .sqlite en .js avec python version 3.8 yves <yves@free.invalid> - 2022-05-08 14:05 +0000
Re: Transformer une BD .sqlite en .js avec python version 3.8 yves <yves@free.invalid> - 2022-05-08 14:09 +0000
Re: Transformer une BD .sqlite en .js avec python version 3.8 Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2022-05-08 21:20 +0200
Re: Transformer une BD .sqlite en .js avec python version 3.8 msamandine <nospam_amsmarie8@gmail.com.invalid> - 2022-05-09 01:06 -0500
Re: Transformer une BD .sqlite en .js avec python version 3.8 yves <yves@free.invalid> - 2022-05-09 08:43 +0000
Re: Transformer une BD .sqlite en .js avec python version 3.8 Benoit Izac <use.reply.to@INVALID.ADDRESS> - 2022-05-09 16:19 +0200
csiph-web