Question

J'utilise un pilote ODBC iSeries Access pour essayer d'exécuter des requêtes sur DB2 pour i.J'aimerais rendre ces informations plus lisibles.Comment puis-je convertir les informations du tableau d'octets en utilisant Python ?Exemple de sortie ci-dessous :

>>> cursor.execute("SELECT * FROM QAAPFILE$") 
<pyodbc.Cursor object at 0x00C6D2C0>
>>> for row in cursor:
...     print row         


Example Output:
(1, bytearray(b'\xfd@@@@@@@@@'), 1, 1, 8, 9, bytearray(b'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'), bytearray(b'@@@@@@@@@@@@@@@@@@@@'), bytearray(b'\x00<\x02\x82B\x02\x02<\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'))
Many more rows
Était-ce utile?

La solution

Je ne sais pas pourquoi vous consultez QAAPFILE$, et je ne suis pas sûr des données qui en sont extraites doit être récupéré comme bytearray.Mais si vous devez absolument lire les octets bruts, alors la première chose à savoir est que l'IBM i (AS/400, iSeries, etc.) est nativement EBCDIC.Le « @ » est un signe révélateur que vous devez utiliser decode('cp037').Dans la page de codes 37 (standard américain EBCDIC, vous devrez peut-être l'ajuster légèrement en fonction des paramètres régionaux), un espace est '\x40', qui se trouve être le même que '@' en ASCII ou UTF-8.

Maintenant, je dirai que les échantillons que vous avez donnés ne décodent pas bien, donc il y a malheureusement plus à raconter.Comme les commentateurs, j'aurai besoin de plus d'informations.(Par exemple, je suis toujours très perplexe quant à la raison pour laquelle vous auriez besoin de consulter QAAPFILE$.Et, pour mémoire, je n’ai jamais vu ni utilisé ce fichier.J'ai utilisé pyODBC de nombreuses fois pour me connecter au i, et je n'ai jamais eu à utiliser bytearray.)

Modifier: J'ai maintenant eu l'occasion de consulter QAAPFILE$ sur la machine sur laquelle je travaille, et je peux vous dire que vous n'y trouverez pas de caractères alphanumériques lisibles.Eh bien, cette deuxième colonne (la première bytearray élément dans le tuple de ligne) est en fait lisible avec le décodage approprié, mais le dernier ne l'est vraiment pas, même pas en le regardant directement sur le serveur à l'aide d'une interface native.Ce ne sont en réalité que des données binaires.Je ne peux pas imaginer quelle utilité vous pourriez avoir pour ce fichier.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top