From 9d7b2db5754f0f7d292f683d2e5e3a5c693f7db4 Mon Sep 17 00:00:00 2001 From: Vincent Date: Thu, 12 Dec 2013 02:24:24 +0100 Subject: [PATCH] [bde/supprimer] On peut supprimer une liste d'id et pas seulement un intervalle --- bde/supprimer_quelquun.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/bde/supprimer_quelquun.py b/bde/supprimer_quelquun.py index 0123f06..5564278 100755 --- a/bde/supprimer_quelquun.py +++ b/bde/supprimer_quelquun.py @@ -13,16 +13,22 @@ class NonZeroError(ValueError): def __init__(self): super(NonZeroError, self).__init__("Solde du compte non-nul") +def liste_to_sql(l): + """Renvoie la liste d'entiers en chaîne sql utilisable""" + assert all([type(i) == int for i in l]) + return "(" + ",".join([str(i) for i in l]) + ")" + def getcursor(): """Ouvre une connexion à la base de données.""" con = psycopg2.connect(database="bde") cur = con.cursor(cursor_factory=psycopg2.extras.DictCursor) return con, cur -def get_comptes(debut, fin): - """Récupère les comptes entre début et fin.""" +def get_comptes(liste): + """Récupère les comptes entre début et fin. + Attention au contenu de liste, quand même.""" con, cur = getcursor() - cur.execute("SELECT * FROM adherents WHERE numcbde>=%s AND numcbde<=%s ORDER BY numcbde;", (debut,fin)) + cur.execute("SELECT * FROM adherents WHERE numcbde in %s ORDER BY numcbde;" % liste_to_sql(liste)) l = cur.fetchall() return l @@ -33,9 +39,9 @@ def check_impossibles(l): print "Je supprimerai pas quelqu'un dont le solde n'est pas nul : %s" % (",".join([str(adh["numcbde"]) for adh in paspossibles])) raise NonZeroError -def supprime(debut, fin): - """Supprime les comptes de numcbde entre ``debut`` et ``fin`` (compris).""" - l = get_comptes(debut, fin) +def supprime(liste): + """Supprime les comptes dont le numcbde est dans ``liste``.""" + l = get_comptes(liste) check_impossibles(l) con, cur = getcursor() cur.execute("""UPDATE adherents @@ -43,8 +49,8 @@ def supprime(debut, fin): passwd='!', section='', adresse='', email='nobody@crans.org', droits=0, surdroits=0, supreme='f', bloque='t', fonction='', mail_info=0, club='f', telephone='', theme='UNI', pbsante='', - normalien='t', numsecu='' WHERE numcbde>=%s AND numcbde<=%s; - """ % (debut, fin)) + normalien='t', numsecu='' WHERE numcbde in %s; + """ % (liste_to_sql(liste))) cur.execute("COMMIT;") def interactive(): @@ -59,7 +65,7 @@ def interactive(): else: fin = int(fin) - l = get_comptes(debut, fin) + l = get_comptes(range(debut, fin+1)) print spp(l, ["numcbde", "nom", "prenom", "pseudo", "solde"]) ans=raw_input("""Êtes-vous sûr de vouloir les "supprimer" ? """) -- 2.39.2