Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Réseau/Web
Réseau/Web Forum d'entraide sur Python et le réseau/Web
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 27/07/2012, 16h19   #1
otobenzina
 
Othmane BENZINA
Inscription : mai 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Othmane BENZINA
Localisation : Maroc

Informations forums :
Inscription : mai 2012
Messages : 15
Points : -4
Points : -4
Par défaut Explication sur sqlite3 et python

salut,

pour quoi quand je veux faire un UPDATE ou INSERT dans une fonction et je retourne une réponse pour l'afficher il me donne erreur???

merci

la fonction:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
def Modifier_pass(self,login,l_pass,n_pass,r_n_pass):
                if self.verifier:
                        n_pass_h=md5(n_pass).hexdigest()
                        l_pass_h=md5(l_pass).hexdigest()
                        r_n_pass_h=md5(r_n_pass).hexdigest()
 
                        if n_pass_h!=r_n_pass_h:
                                return "Retaper votre mot de passe"
                        else:
                                if login!=self.Get_login():
                                        return "Login est incorrect"
                                else:
                                        if l_pass_h!=self.Get_password():
                                                return "L'ancien mot de passe est incorrect"
                                        else:
                                                if self.Get_profil()=='Admin':
                                                        if Test_Pass(login,n_pass)!='p0':
                                                                return reponse(Test_Pass(login,n_pass))
                                                        else:
                                                                self.cursor.execute('UPDATE Comptes SET password=? WHERE login=?',(n_pass_h,login,))
                                                                self.connection.commit()
                                                                return "le mot de passe a été mis à jour avec succès"
                                                else:
                                                        if Test_Pass(login,n_pass)!='p0':
                                                                return reponse(Test_Pass(login,n_pass))
                                                        else:
                                                                self.cursor.execute('UPDATE Comptes SET password=? WHERE login=?',(n_pass_h,login,))
                                                                self.connection.commit()
                                                                Modifier_Pass(login,n_pass)
                                                                return "le mot de passe a été mis à jour avec succès"
                else:
                        return 0

l'appel du fonction:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#! /usr/bin/python
# -*- coding: utf-8 -*-
 
import sys, cgi
from Base import *
import Cookie
 
 
form = cgi.FieldStorage()
login=form.getvalue('login')
l_pass=form.getvalue('l_pass')
n_pass=form.getvalue('n_pass')
r_n_pass=form.getvalue('r_n_pass')
 
C=Cookie.SimpleCookie(os.environ['HTTP_COOKIE'])
user=C["user"].value
password=C["password"].value
 
a=DBOAB('OAB.db')
 
a.Authentification(user,password)
rep=a.Modifier_pass(login,l_pass,n_pass,r_n_pass)
print "Content-type:text/html\r\n\r\n"
if a.verifier:
        print rep
else:
        print 'non'
otobenzina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2012, 16h50   #2
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 690
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 690
Points : 4 518
Points : 4 518
Si vous ne donnez pas l'erreur remontée ni un code permettant de la reproduire, que voulez vous qu'on réponde?
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/07/2012, 20h39   #3
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 766
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 766
Points : 3 034
Points : 3 034
Bonjour,

Je viens d'essayer avec update, et effectivement, ça ne renvoie pas le nombre de lignes modifiées comme certains serveurs le font. Sqlite3 est très pratique et très performant, mais ne respecte que le SQL1992.

Il ne reste plus qu'à faire un 'select' avec un count(*) et le même where que pour l'update, et on a l'info.

Par exemple si on a:

Code :
curseur.execute("""update codes set code='btrx' where code='btr' """)
On a le nombre de lignes modifiées avec:

Code :
1
2
curseur.execute("""select count(*) from codes where code='btr' """)
nblignes = curseur.fetchone()[0]
Comme sqlite est très rapide, ça ne devrait pas se sentir...
__________________
Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
Mes recettes python: http://www.jpvweb.com
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/07/2012, 01h00   #4
wiztricks
Expert Confirmé Sénior
 
Inscription : juin 2008
Messages : 3 690
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 3 690
Points : 4 518
Points : 4 518
Citation:
Envoyé par tyrtamos Voir le message
Je viens d'essayer avec update, et effectivement, ça ne renvoie pas le nombre de lignes modifiées comme certains serveurs le font. Sqlite3 est très pratique et très performant, mais ne respecte que le SQL1992.
sqlite3 fait ce qu'il peut avec les standards SQL.
Côté Python, tant que le module correspondant respecte la DBAPI (de Python) çà me va bien... car l'info dans remonte dans cursor.rowcount.
Voir gribouillage ci dessous:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import sqlite3
from contextlib import closing
 
def show_records(cnx, state):
   sql = """select * from test where state = :state"""
   with closing(cnx.cursor()) as c:
       c.execute(sql, vars())
       rows = c.fetchall()
   print ('state: %s, count= %d' % (state, len(rows)))  
 
def update_records(cnx, value, state):
    sql = "update test set value = :value where state = :state"
    with closing(cnx.cursor()) as c:
        c.execute(sql, vars())
        print ('state: %s, updated: %d' % (state, c.rowcount))
 
if __name__ == '__main__':
    import random
 
    ddl = """create table test(
           name text primary key,
           state text,
           value integer default 1)"""
 
    cnx = sqlite3.connect(':memory:')
    cnx.execute(ddl)
 
    COUNT = 10
    STATES = ('a', 'b', 'c', 'd')
    records = [ ('ident-%d' % x, random.choice(STATES)) for x in range(COUNT) ]
    cnx.executemany('insert into test (name, state) values (:name, :state)', records)
 
    show_records(cnx, 'a')
    update_records(cnx, 2, 'a')
    show_records(cnx, 'a')
 
    show_records(cnx, 'x')
    update_records(cnx, 2, 'x')
En sortie çà donne:
Code :
1
2
3
4
5
state: a, count= 4
state: a, updated: 4
state: a, count= 4
state: x, count= 0
state: x, updated: 0
Ceci dit le PO parle de remontée d'une erreur (traduire exception?) et comme il ne teste pas le retour des appels à .execute je ne suis pas certain que cette digression l'aide beaucoup.
Enfin on verra bien.
- W
__________________
Architectures Post-Modernes
wiztricks est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h48.


 
 
 
 
Partenaires

Hébergement Web