additionner les éléments d'un tuple

Le
guyguy
Bonjour
j'ai un problème avec mon programme
je cherche a additionner les valeur d'un champ qui est recupérer sous
forme de liste de tuple partant de sa valeur initiale
Voici mon code


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 tx_part 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)
if res:
tx_in = res[0][0] + val['tx_part']


NB: Chose étrange est que le premier enregistrement passe, mais ma
liste est vide et le second donne une erreur
TypeError: tx_in = res[0][0] + val['tx_part']
tuple indices must be integers


SVP si quelqu'un à une idée
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Alain BARTHE
Le #9696331
guyguy a écrit :
Bonjour
j'ai un problème avec mon programme
je cherche a additionner les valeur d'un champ qui est recupérer sous
forme de liste de tuple partant de sa valeur initiale
Voici mon code


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 tx_part 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)
if res:
tx_in = res[0][0] + val['tx_part']


NB: Chose étrange est que le premier enregistrement passe, mais ma
liste est vide et le second donne une erreur
TypeError: tx_in = res[0][0] + val['tx_part']
tuple indices must be integers


SVP si quelqu'un à une idée



Je ne comprends pas ton algo, mais si val est un tuple, comme l'indique
le message, pour obtenir le premier element, tu dois utiliser val [0] et
non val ['tx_part']

Si tu veux la somme de res , utilise sum (res)
guyguy
Le #9710751
On 27 juin, 13:22, Alain BARTHE
guyguy a écrit :



> Bonjour
> j'ai un problème avec mon programme
> je cherche a additionner les valeur d'un champ qui est recupérer sous
> forme de liste de tuple  partant de sa valeur initiale
> Voici mon code

> 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 tx_part 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)
>         if res:
>             tx_in = res[0][0] + val['tx_part']

> NB: Chose étrange est que le premier enregistrement passe, mais ma
> liste est vide et  le second donne une erreur
> TypeError:  tx_in = res[0][0] + val['tx_part']
> tuple indices must be integers

> SVP si quelqu'un à une idée

Je ne comprends pas ton algo, mais si val est un tuple, comme l'indique
le message, pour obtenir le premier element, tu dois utiliser val [0] et
non val ['tx_part']

Si tu veux la somme de res , utilise sum (res)



val n'est pas le tuple, val parcour la liste de tuple qui est renvoyer
par fetchall()
tx_part est champ de saisie
je saisie des valeurs une à une dans tx_part et avoir la somme de
toute ces valeurs ainsi que la valeure initial de tx_part
Bruno Desthuilliers
Le #9713851
guyguy a écrit :
Bonjour
j'ai un problème avec mon programme
je cherche a additionner les valeur d'un champ qui est recupérer sous
forme de liste de tuple partant de sa valeur initiale
Voici mon code


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 tx_part 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)



res = cr.fetchall()

if res:
tx_in = res[0][0] + val['tx_part']



ici (du moins avec ton algo), val est le dernier tuple de la liste
retournée par cr.fetchall().


NB: Chose étrange est que le premier enregistrement passe, mais ma
liste est vide et le second donne une erreur
TypeError: tx_in = res[0][0] + val['tx_part']
tuple indices must be integers



cqfd.
Bruno Desthuilliers
Le #9713841
guyguy a écrit :
On 27 juin, 13:22, Alain BARTHE
guyguy a écrit :



Bonjour
j'ai un problème avec mon programme
je cherche a additionner les valeur d'un champ qui est recupérer sous
forme de liste de tuple partant de sa valeur initiale
Voici mon code
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 tx_part 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)
if res:
tx_in = res[0][0] + val['tx_part']
NB: Chose étrange est que le premier enregistrement passe, mais ma
liste est vide et le second donne une erreur
TypeError: tx_in = res[0][0] + val['tx_part']
tuple indices must be integers
SVP si quelqu'un à une idée


Je ne comprends pas ton algo, mais si val est un tuple, comme l'indique
le message, pour obtenir le premier element, tu dois utiliser val [0] et
non val ['tx_part']

Si tu veux la somme de res , utilise sum (res)



val n'est pas le tuple,



Si.

val parcour la liste de tuple qui est renvoyer
par fetchall()



Non. val est le nom auxquels sont associés, successivement, les tuples
compris dans la liste retournée par fetchall(). Une fois sorti de la
boucle (par ailleur inutile), ce nom reste lié au dernier tuple de la
liste. IOW :

for val in cr.fetchall():
res.append(val)
assert val is res[-1]
guyguy
Le #9725631
On 27 juin, 15:06, Bruno Desthuilliers <bruno.
wrote:
guyguy a écrit :



> On 27 juin, 13:22, Alain BARTHE >> guyguy a écrit :

>>> Bonjour
>>> j'ai un problème avec mon programme
>>> je cherche a additionner les valeur d'un champ qui est recupérer so us
>>> forme de liste de tuple  partant de sa valeur initiale
>>> Voici mon code
>>> 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 tx_part FROM production_coassuranc e WHERE
>>> numcontrat=%s AND situation=%s AND type_souscri=%s" ,[id_contra t, sit,
>>> type_sous])
>>>         res = []
>>>         for val in cr.fetchall():
>>>             res.append(val)
>>>         if res:
>>>             tx_in = res[0][0] + val['tx_part']
>>> NB: Chose étrange est que le premier enregistrement passe, mais ma
>>> liste est vide et  le second donne une erreur
>>> TypeError:  tx_in = res[0][0] + val['tx_part']
>>> tuple indices must be integers
>>> SVP si quelqu'un à une idée
>> Je ne comprends pas ton algo, mais si val est un tuple, comme l'indiqu e
>> le message, pour obtenir le premier element, tu dois utiliser val [0] et
>> non val ['tx_part']

>> Si tu veux la somme de res , utilise sum (res)

> val n'est pas le tuple,

Si.

> val parcour la liste de tuple qui est renvoyer
> par fetchall()

Non. val est le nom auxquels sont associés, successivement, les tuples
compris dans la liste retournée par fetchall(). Une fois sorti de la
boucle (par ailleur inutile), ce nom reste lié au dernier tuple de la
liste. IOW :

for val in cr.fetchall():
     res.append(val)
assert val is res[-1]



Merci pour le bout de code elle marche et il me donne cette reponse
[(1,), (1,)]
mais je veux la valeur de ce resultat dans une variable pour me permet
de faire une comparaison de valeur
merci pour ce bout de code
Alain BARTHE
Le #9784691
Bruno Desthuilliers a écrit :
guyguy a écrit :
Bonjour
j'ai un problème avec mon programme
je cherche a additionner les valeur d'un champ qui est recupérer sous
forme de liste de tuple partant de sa valeur initiale
Voici mon code


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 tx_part 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)



res = cr.fetchall()

if res:
tx_in = res[0][0] + val['tx_part']



ici (du moins avec ton algo), val est le dernier tuple de la liste
retournée par cr.fetchall().


NB: Chose étrange est que le premier enregistrement passe, mais ma
liste est vide et le second donne une erreur
TypeError: tx_in = res[0][0] + val['tx_part']
tuple indices must be integers



cqfd.



C'est pas clair cette histoire...
guyguy
Le #10864701
On 27 juin, 21:09, Alain BARTHE
Bruno Desthuilliers a écrit :

> guyguy a écrit :
>> Bonjour
>> j'ai un problème avec mon programme
>> je cherche a additionner les valeur d'un champ qui est recupérer sous
>> forme de liste de tuple  partant de sa valeur initiale
>> Voici mon code

>> 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 tx_part 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)

>           res = cr.fetchall()

>>         if res:
>>             tx_in = res[0][0] + val['tx_part']

> ici (du moins avec ton algo), val est le dernier tuple de la liste
> retournée par cr.fetchall().

>> NB: Chose étrange est que le premier enregistrement passe, mais ma
>> liste est vide et  le second donne une erreur
>> TypeError:  tx_in = res[0][0] + val['tx_part']
>> tuple indices must be integers

> cqfd.

C'est pas clair cette histoire...



Bruno voici l'ensemble du code

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']

et sa me donne le resultat voulu(c'est à dire après chaque
enregistrement il me donne la somme de ('txtp')
Bruno Desthuilliers
Le #10866891
guyguy a écrit :
(snip)
Bruno voici l'ensemble du code

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']




et sa me donne le resultat voulu(c'est à dire après chaque
enregistrement il me donne la somme de ('txtp')



Pas exactement, non. Tu ajoutes la valeur du champ txtp *du premier
enregistrement* à chaque itération. je doute très honnêtement que ce
soit ce que tu veux.

Si tu a l'usage de res ailleurs dans ton code (et en partant du principe
que txtp est un numérique, of course...):

cr.execute("""
SELECT txtp FROM production_coassurance
WHERE numcontrat=%s
AND situation=%s
AND type_souscri=%s
""",
(id_contrat, sit, type_sous)
)

res = cr.fetchall()
vals['txtp'] += sum(rec[0] for rec in res)


Sinon (ie: tu n'utilises pas le contenu de res ailleurs), utiliser les
fonctions d'agrégation de ta base serait certainement plus payant:

cr.execute("""
SELECT sum(txtp) FROM production_coassurance
WHERE numcontrat=%s
AND situation=%s
AND type_souscri=%s
""",
(id_contrat, sit, type_sous)
)

vals['txtp'] += cr.fetchone()[0]
Publicité
Poster une réponse
Anonyme