Comment acceder a un champ de bdd par son nom, (ou acces a un tuple de tuples)

Jan Burgy jburgy at hotmail.com
Tue Sep 7 17:25:24 EDT 2004


richard <richard at nullpart.org> wrote in message news:<chk0j9$10f$1 at reader1.imaginet.fr>...
> bonjour
> 
> je me connecte à une base de données interbase/firebird en utilisant, 
> KinterbasDB
> http://kinterbasdb.sourceforge.net/ pour ceux que ca interesse
> 
> mais je pense que le probleme est le meme quel que soit la bdd
> 
> j'aimerais acceder a un champs par sont nom plutot que par son index 
> dans le record en cours, comme je fais maintenent
> 
> la prop description du curseur renvoye le tuple de tuple suivant
> (('PATIENTID', <type 'str'>, 180, 180, 0, 0, True), 
> ('ORIGINALPATIENTID', <type 'str'>, 60, 60, 0, 0, True), ('CENTERID', 
> <type 'int'>, 11, 4, 0, 0, True), ('NAME', <type 'str'>, 452, 452, 0, 0, 
> True), ('FIRSTNAME', <type 'str'>, 452, 452, 0, 0, True), ('BIRTH', 
> <type 'int'>, 6, 2, 0, 0, True), ('SEXE', <type 'int'>, 6, 2, 0, 0, 
> True), ('ENTRYDATE', <type 'DateTime'>, 10, 4, 0, 0, True), ('COMMENTS', 
> <type 'str'>, 0, 8, 0, 2, True), ('LASTMODIFDATE', <type 'DateTime'>, 
> 10, 4, 0, 0, True), ('DEP', <type 'int'>, 6, 2, 0, 0, True), 
> ('QUESTIOID', <type 'int'>, 11, 4, 0, 0, True), ('CREADATE', <type 
> 'DateTime'>, 22, 8, 0, 0, True))
> 
> le row courant est lui un tuple simple:
> ('02-0000', None, 2, None, None, 1961, 1, <DateTime object for 
> '2002-06-16 00:00:00.00' at 90c860>, 'sevrage effectu\xe9\x00\x00', 
> <DateTime object for '2002-07-16 00:00:00.00' at 932f20>, None, 520, 
> <DateTime object for '2004-07-05 00:00:00.00' at 91f4e0>)
> 
> comment, par exemple, acceder au 3em element du tuple (en l'occurence le 
> nombre 2) en utilisant le nom CENTERID qui est le premier element du 
> 3eme element du tuple qui decrit la strucure  ?
> 
> j'espere que je me suis fais comprendre
> 
> merci d'avance...

Salut Richard,

je fais quelque-chose de tres semblable. Mon idee est la suivante
(attention, je tape tout de tete et je te laisse le soin de tester
toi-meme):

# d'abord il faut extraire une list de tous les noms:
names = [ x[0] for x in cursor_description ]

# ensuite tu bricoles un dictionnaire avec le row courant:
row = dict(zip(names, current_row))

# tu peux maintenant faire les acces suivants:
center_id = row["CENTERID"]
first_name = row["FIRSTNAME"]
# etc...

Un derniere remarque: la langue officielle de comp.lang.python est
l'anglais. Tu auras donc beaucoup plus de succes si tu traduis tes
messages avant de les envoyer...

Bonne chance,

Jan



More information about the Python-list mailing list