[PYTHON] [Introduction à cx_Oracle] (5e) Gestion des données japonaises

Environnement de vérification

--Utilisation d'Oracle Cloud

introduction

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.

Préparation préalable

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.

argument d'encodage

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

[Introduction à cx_Oracle] (5e) Gestion des données japonaises
[Introduction à cx_Oracle] (16ème) Gestion des types LOB
[Introduction à cx_Oracle] (12e) Gestion des exceptions DB
[Introduction à cx_Oracle] (17e) Gestion du type de date
[Introduction à cx_Oracle] (Partie 7) Gestion des variables de liaison
[Introduction à cx_Oracle] Présentation de cx_Oracle
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
[Introduction au Data Scientist] Bases de Python ♬
[Cx_Oracle Primer] (Partie 3) Bases de la navigation dans les tableaux
[Introduction à cx_Oracle] (Partie 11) Bases de l'exécution PL / SQL
Série: Introduction à cx_Oracle Contents
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats
[Introduction à cx_Oracle] (10e) Instruction Update DML et DDL / DCL
[Introduction to Data Scientists] Bases de Python ♬ Fonctions et classes
Traitement des données 2 Analyse de divers formats de données
De l'introduction de JUMAN ++ à l'analyse morphologique du japonais avec Python
[Introduction à cx_Oracle] (Partie 2) Principes de base de la connexion et de la déconnexion à Oracle Database
[Introduction to Data Scientists] Bases de Python ♬ Branchements conditionnels et boucles
[Introduction aux Data Scientists] Bases de Python ♬ Fonctions et fonctions anonymes, etc.
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.1-8.2.5)
[Introduction à Python3, jour 17] Chapitre 8 Destinations de données (8.3-8.3.6.1)
[Introduction à Python3 Jour 19] Chapitre 8 Destinations de données (8.4-8.5)
[Introduction à l'application Udemy Python3 +] 65. Gestion des exceptions
[Introduction aux data scientists] Bases de la probabilité et des statistiques ♬ Variable de probabilité / probabilité et distribution de probabilité
Introduction à Scapy ① (De l'installation à l'exécution de Scapy)
[Introduction à cx_Oracle] (Partie 9) Mappage des types de données DB et Python (version 8 ou ultérieure)
Introduction à la modélisation statistique pour l'analyse des données Élargissement de la gamme d'applications de GLM
[Introduction à cx_Oracle] (15e) Création d'un jeu de résultats dans un format autre que tapple
Une introduction à l'analyse de données à l'aide de Python - Pour augmenter le nombre de vues vidéo -
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
[Introduction au modèle SEIR] Essayez d'ajuster les données COVID-19 ♬
[Introduction à Udemy Python3 + Application] 26. Copie du dictionnaire
Convertissez les données avec la forme (nombre de données, 1) en (nombre de données,) avec numpy.
[Introduction à Udemy Python3 + Application] 19. Copie de la liste
[PyTorch] Introduction à la classification des documents japonais à l'aide de BERT
[Introduction à Python] Comment gérer les données au format JSON
Introduction de ferenOS 2 (paramètres après l'installation, paramètres d'entrée japonais)
Je veux obtenir les données de League of Legends ③
Djnago Note Set Japanese pour le nom de fichier Content-Disposition
Je veux obtenir les données de League of Legends ①
De l'introduction de pyethapp à l'exécution du contrat
[Introduction à Python] Utilisation de base des expressions lambda
Introduction au Deep Learning pour la première fois (Chainer) Reconnaissance de caractères japonais Chapitre 4 [Amélioration de la précision de la reconnaissance en développant les données]
Introduction à MQTT (Introduction)
Introduction à Scrapy (3)
Premiers pas avec Supervisor
Introduction de scikit-Optimize
Introduction à Tkinter 1: Introduction
Introduction de PyGMT
Introduction à PyQt
Introduction à Scrapy (2)
Traitement des données multi-conditions
[Linux] Introduction à Linux
Introduction à l'apprentissage automatique ~ Montrons le tableau de la méthode du K plus proche voisin ~ (+ gestion des erreurs)
Introduction à Scrapy (4)
Introduction à discord.py (2)