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
print "\e[1;31mJe supprimerai pas quelqu'un dont le solde n'est pas nul : %s\e[0m" % (",".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
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():
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" ? """)