Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème de recuperation de la valeur d'un champ de la base de donnée

5 réponses
Avatar
guyguy
Bonsoir
je veux recuperer la valeur d'un champ pour poser une condition if
Voici le code

def create(self,cr,uid,vals,context=3D{}):
vals['txtp'] =3D vals['tx_part']
# compare la somme des taux existant =E0 100
crt_obj =3D
self.pool.get('production.contrat').browse(cr,uid,vals['numcontrat'])
id_contrat =3D (str(crt_obj)[-2:-1])
coa =3D crt_obj.numcontrat
sit =3D crt_obj.situation
type_sous =3D crt_obj.type_souscri

cr.execute("SELECT txtp FROM production_coassurance WHERE
numcontrat=3D%s AND situation=3D%s AND type_souscri=3D%s" ,[id_contrat, sit=
,
type_sous])
res =3D []
for val in cr.fetchall():
res.append(val)
vals['txtp'] =3D res[0][0] + vals['txtp']

(-------------jusqu'ici il marche--------------)

cr.execute("select txtp from production_coassurance where
numcontrat=3D%s",[id_contrat])
rs =3D []
for k in cr.fetchall():
rs.append(k)

je veux txtp qui est un champ de la base qui est de integer
je veux poser une condition s'il est superieur =E0 100 par exemple

5 réponses

Avatar
guyguy
On 30 juin, 15:49, guyguy wrote:
Bonsoir
je veux recuperer la valeur d'un champ pour poser une condition if
Voici le code

def create(self,cr,uid,vals,context={}):
        vals['txtp'] = vals['tx_part']
        # compare la somme des taux existant à 100
        crt_obj =
self.pool.get('production.contrat').browse(cr,uid,vals['numcontrat'])
        id_contrat = (str(crt_obj)[-2:-1])
        coa = crt_obj.numcontrat
        sit = crt_obj.situation
        type_sous = crt_obj.type_souscri

        cr.execute("SELECT txtp FROM production_coassurance WHERE
numcontrat=%s AND situation=%s AND type_souscri=%s" ,[id_contrat, s it,
type_sous])
        res = []
        for val in cr.fetchall():
            res.append(val)
            vals['txtp'] = res[0][0] + vals['txtp']

(-------------jusqu'ici il marche--------------)

        cr.execute("select txtp from production_coassurance where
numcontrat=%s",[id_contrat])
        rs = []
        for k in cr.fetchall():
            rs.append(k)

je veux txtp qui est un champ de la base qui est de integer
je veux poser une condition s'il est superieur à 100 par exemple



Merci je reuisir à recuperer la valeur
Merci
Avatar
Bruno Desthuilliers
guyguy a écrit :
Bonsoir
je veux recuperer la valeur d'un champ pour poser une condition if
Voici le code

def create(self,cr,uid,vals,context={}):



Gotcha : les valeurs par défaut des arguments ne sont évaluées qu'une
seule et unique fois. Tu veux:

def create(self, cr, uid, vals, context=None):
if context is None:
context = {}

vals['txtp'] = vals['tx_part']
# compare la somme des taux existant à 100
crt_obj > self.pool.get('production.contrat').browse(cr,uid,vals['numcontrat'])
id_contrat = (str(crt_obj)[-2:-1])
coa = crt_obj.numcontrat
sit = crt_obj.situation
type_sous = crt_obj.type_souscri

cr.execute("SELECT txtp FROM production_coassurance WHERE
numcontrat=%s AND situation=%s AND type_souscri=%s" ,[id_contrat, sit,
type_sous])
res = []
for val in cr.fetchall():
res.append(val)
vals['txtp'] = res[0][0] + vals['txtp']

(-------------jusqu'ici il marche--------------)



*Non*. cf réponse dans un thread précédent.

cr.execute("select txtp from production_coassurance where
numcontrat=%s",[id_contrat])
rs = []
for k in cr.fetchall():
rs.append(k)



*pourquoi* ??? Pourquoi cette boucle *inutile* qui reconstruit à
l'identique la liste retournée par cr.fetchall() ? Est-ce que tu
comprends le code que tu écris ??? Ou est-ce que tu essayes n'importe
quoi au hasard - en évitant soigneusement de lire la doc - jusqu'à ce
que *par accident*, ça *semble* donner le résultat ? Désolé d'être
désagréable, mais là, vraiment, il y a de quoi se poser des questions.


je veux txtp qui est un champ de la base qui est de integer
je veux poser une condition s'il est superieur à 100 par exemple



Clause WHERE de ta requete SQL.
Avatar
guyguy
On 30 juin, 16:28, Bruno Desthuilliers <bruno.
wrote:
guyguy a écrit :

> Bonsoir
> je veux recuperer la valeur d'un champ pour poser une condition if
> Voici le code

> def create(self,cr,uid,vals,context={}):

Gotcha : les valeurs par défaut des arguments ne sont évaluées qu'u ne
seule et unique fois. Tu veux:

def create(self, cr, uid, vals, context=None):
    if context is None:
        context = {}



>         vals['txtp'] = vals['tx_part']
>         # compare la somme des taux existant à 100
>         crt_obj =
> self.pool.get('production.contrat').browse(cr,uid,vals['numcontrat'])
>         id_contrat = (str(crt_obj)[-2:-1])
>         coa = crt_obj.numcontrat
>         sit = crt_obj.situation
>         type_sous = crt_obj.type_souscri

>         cr.execute("SELECT txtp FROM production_coassurance WHE RE
> numcontrat=%s AND situation=%s AND type_souscri=%s" ,[id_contrat, sit,
> type_sous])
>         res = []
>         for val in cr.fetchall():
>             res.append(val)
>             vals['txtp'] = res[0][0] + vals['txtp']

> (-------------jusqu'ici il marche--------------)

*Non*. cf réponse dans un thread précédent.

>         cr.execute("select txtp from production_coassurance whe re
> numcontrat=%s",[id_contrat])
>         rs = []
>         for k in cr.fetchall():
>             rs.append(k)

*pourquoi* ??? Pourquoi cette boucle *inutile* qui reconstruit à
l'identique la liste retournée par cr.fetchall() ? Est-ce que tu
comprends le code que tu écris ??? Ou est-ce que tu essayes n'importe
quoi au hasard - en évitant soigneusement de lire la doc - jusqu'à ce
que *par accident*, ça *semble* donner le résultat ? Désolé d'ê tre
désagréable, mais là, vraiment, il y a de quoi se poser des questio ns.

> je veux txtp qui est un champ de la base qui est de integer
> je veux poser une condition s'il est superieur à 100 par exemple

Clause WHERE de ta requete SQL.



Merci Bruno pour la remarque sur mon code
je pense faire un effort la prochaine fois
Ne te gène pas de me dire parce que je doit être un bon developpeur en
python
Avatar
bruno.desthuilliers
On 30 juin, 19:32, guyguy wrote:
(snip)
Merci Bruno pour la remarque sur mon code



Merci à toi de le prendre bien - j'ai tendance à taper fort des fois.

je pense faire un effort la prochaine fois
Ne te gène pas de me dire parce que je doit être un bon developpeur en
python



Comment dire... Le problème n'est pas ici spécifique à Python AMHA,
mais plutôt d'une approche vouée à l'échec qui consiste à essayer les
trucs au petit bonheur la chance au lieu de comprendre ce qu'on fait.
Le problème serait le même en PHP, en C, etc... Si tu veux devenir un
bon programmeur (ou même un programmeur correct), laisse tomber la
"programmation par accident", lit le manuel (celui du langage que tu
utilises bien sûr, mais aussi des manuels plus généralistes), utilise
l'interpréteur interactif pour explorer les API des bibliothèques que
tu utilises, apprend à utiliser le debuggeur pour suivre pas à pas
l'éxecution de ton code et t'assurer qu'il fait bien ce que tu crois,
bref, fait en sorte de *savoir* ce que fait ton code.
Avatar
Christophe
a écrit :
On 30 juin, 19:32, guyguy wrote:
(snip)
Merci Bruno pour la remarque sur mon code



Merci à toi de le prendre bien - j'ai tendance à taper fort des fois.

je pense faire un effort la prochaine fois
Ne te gène pas de me dire parce que je doit être un bon developpeur en
python



Comment dire... Le problème n'est pas ici spécifique à Python AMHA,
mais plutôt d'une approche vouée à l'échec qui consiste à essayer les
trucs au petit bonheur la chance au lieu de comprendre ce qu'on fait.
Le problème serait le même en PHP, en C, etc...



Justement, il me semble que le terme inventé pour ce genre de chose est
le Shotgun Debugging: http://en.wikipedia.org/wiki/Shotgun_debugging
(pas trouvé de version en français)

J'ai tout de suite pensé à ça en voyant ce message, mais en lisant cette
partie de la définition de Wikipedia, ça conforte grandement dans le
choix de ce terme:
"when used as an attempt to work around programming language features
that one may be using improperly"

On peut voir facilement de part de l'age de ce "Jargon File" que ce
genre de code n'est absolument pas spécifique à Python et même bien plus
ancien que lui :)