Forum Programmation.python OpenERP : Recupérer la valeur d'un objet binary de postgreSQL

Posté par . Licence CC by-sa
2
9
déc.
2013

La table ir_act_client contient un champs params_store qui, lorsqu'on l'affiche via une requête SQL avec psql, a une valeur représenté par un hexadécimal.

Par exemple, par défaut dans la version 7, pour mail.wall, on a :
x7b202020202020202020202020202020202027646f6d61696e273a205b202020202020202020202020202020202020202020282773746172726564272c20273d272c2054727565292c20202020202020202020202020202020205d2c202020202020202020202020202020202027766965775f6d61696c626f78273a20547275652c202020202020202020202020202020202027726561645f616374696f6e273a202772656164272c202020202020202020202020202020202027636f6d706f73655f61735f746f646f273a2054727565202020202020202020202020207d

Si vous êtes en phase d'exploration de la BDD, c'est un peu dur à lire.

Voici une fonction python pour décoder cette valeur (par copier coller dans une session interactive):

>>> conv = lambda x: ''.join(chr(int(a+b, 16)) for a,b in zip(x[1::2], x[2::2]))

et le résultat:

>>> conv("x7b202020202020202020202020202020202027646f6d61696e273a205b202020202020202020202020202020202020202020282773746172726564272c20273d272c2054727565292c20202020202020202020202020202020205d2c202020202020202020202020202020202027766965775f6d61696c626f78273a20547275652c202020202020202020202020202020202027726561645f616374696f6e273a202772656164272c202020202020202020202020202020202027636f6d706f73655f61735f746f646f273a2054727565202020202020202020202020207d")
"{                 'domain': [                     ('starred', '=', True),                 ],                 'view_mailbox': True,                 'read_action': 'read',                 'compose_as_todo': True             }"

C'est plus clair ! Non ?

  • # x

    Posté par . Évalué à 2.

    Le "x" du début n'est pas très hexadécimal. Sinon, il existe aussi l'outil hexgen.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.