--Utilisation d'Oracle Cloud
Dans la sérialisation passée, nous avons procédé d'une manière qui ne traitait pas les données japonaises. Cependant, la plupart des personnes qui lisent cette série travaillent probablement dans un environnement japonais et utilisent la base de données Oracle pour les données japonaises. Cette fois, je vais vous expliquer comment gérer SELECT de la table où le japonais est stocké sans caractères déformés.
Utilisez SQL * Plus, SQL Developer, etc. pour exécuter le script suivant. Vous pouvez remplacer une table existante contenant des données japonaises.
sample05a.sql
create table sample05a (col1 varchar2(50));
insert into sample05a values('Japon Oracle Co., Ltd.');
commit;
NLS_LANG Les applications suivantes sont préparées sous forme d'échantillons. Si vous avez préparé une autre table à l'avance, modifiez l'instruction SELECT afin que la colonne de données japonaises soit spécifiée dans la première colonne et exécutez-la. Dans ce cas, cet exemple d'application n'affiche qu'une seule ligne, donc si vous pouvez réduire à une en spécifiant la clé primaire dans la clause WHERE et prendre des mesures telles que limiter le nombre de lignes à la première ligne, temps de traitement supplémentaire Ne prenez pas.
sample05b.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = "select * from sample05a"
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
print((cursor.execute(SQL).fetchone())[0])
En règle générale, si vous devez prendre en charge le japonais lors de l'exécution d'une application qui accède à Oracle Database, vous devez définir la variable d'environnement NLS_LANG dans la plupart des environnements. NLS_LANG est également valide pour cx_Oracle. Voici une comparaison des applications ci-dessus avec et sans NLS_LANG.
$ echo $LANG
en_US.UTF-8
$ echo $NLS_LANG
$ python sample05b.py
??????????
$ export NLS_LANG=japanese_japan.al32utf8
$ python sample05b.py
Japon Oracle Co., Ltd.
Avant de définir NLS_LANG, les données ne s'affichent pas correctement sous la forme "??????????". Dans Oracle Database, "?" S'affiche lorsque la conversion de code de caractère entre la base de données et le client n'est pas possible. Après avoir défini NLS_LANG, il s'affiche correctement.
Dans cx_Oracle, en dehors de NLS_LANG, le codage des caractères peut être spécifié dans le codage de l'argument au moment de la connexion (méthode connect () de cx_Oracle). L'argument de codage par défaut est Aucun et rien n'est défini. Étant donné que UTF-8 est standard dans Python3, si vous vous connectez en spécifiant UTF-8 pour l'encodage, vous pouvez afficher les données japonaises sans définir NLS_LANG. Cependant, par exemple, si vous souhaitez recevoir des messages d'erreur Oracle Database en japonais, vous avez besoin de NLS_LANG. Vous devez également prendre en compte les applications non Python telles que SQL * Plus, c'est donc une bonne idée de le déplacer vers NLS_LANG ou de définir à la fois NLS_LANG et l'encodage.
sample05c.py(Extrait)
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION, encoding="UTF-8") as connection:
Recommended Posts