[PYTHON] [Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten

Überprüfungsumgebung

Einführung

In der vergangenen Serialisierung haben wir so vorgegangen, dass japanische Daten nicht verarbeitet wurden. Die meisten Leute, die diese Serie lesen, arbeiten jedoch wahrscheinlich in einer japanischen Umgebung und verwenden die Oracle-Datenbank für japanische Daten. Dieses Mal werde ich erklären, wie mit SELECT der Tabelle umgegangen wird, in der Japanisch ohne verstümmelte Zeichen gespeichert ist.

Vorbereitungen

Verwenden Sie SQL * Plus, SQL Developer usw., um das folgende Skript auszuführen. Sie können eine vorhandene Tabelle ersetzen, die japanische Daten enthält.

sample05a.sql


create table sample05a (col1 varchar2(50));
insert into sample05a values('Japan Oracle Co., Ltd.');
commit;

NLS_LANG Die folgenden Anwendungen werden als Muster vorbereitet. Wenn Sie zuvor eine andere Tabelle vorbereitet haben, ändern Sie die SELECT-Anweisung so, dass die japanische Datenspalte in der ersten Spalte angegeben ist, und führen Sie sie aus. In diesem Fall zeigt diese Beispielanwendung nur eine Zeile an. Wenn Sie also durch Angabe des Primärschlüssels in der WHERE-Klausel auf eine eingrenzen und Maßnahmen ergreifen können, z. B. die Anzahl der Zeilen auf die erste Zeile beschränken, zusätzliche Verarbeitungszeit Nimm nicht.

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])

Wenn Sie Japanisch unterstützen müssen, wenn Sie eine Anwendung ausführen, die auf Oracle Database zugreift, müssen Sie in den meisten Umgebungen die Umgebungsvariable NLS_LANG festlegen. NLS_LANG gilt auch für cx_Oracle. Das Folgende ist ein Vergleich der obigen Anwendungen mit und ohne NLS_LANG.

$ echo $LANG
en_US.UTF-8
$ echo $NLS_LANG

$ python sample05b.py
??????????
$ export NLS_LANG=japanese_japan.al32utf8
$ python sample05b.py
Japan Oracle Co., Ltd.

Vor dem Festlegen von NLS_LANG werden die Daten nicht korrekt als "??????????" angezeigt. In der Oracle-Datenbank wird "?" Angezeigt, wenn die Zeichencodekonvertierung zwischen der Datenbank und dem Client nicht möglich ist. Nach dem Setzen von NLS_LANG wird es korrekt angezeigt.

Kodierungsargument

In cx_Oracle kann neben NLS_LANG die Zeichenkodierung in der Argumentkodierung zum Zeitpunkt der Verbindung angegeben werden (Methode connect () von cx_Oracle). Das Standardcodierungsargument ist Keine und nichts ist festgelegt. Da UTF-8 in Python3 Standard ist, können Sie japanische Daten anzeigen, ohne NLS_LANG festzulegen, wenn Sie eine Verbindung herstellen, indem Sie UTF-8 in der Codierung angeben. Wenn Sie jedoch beispielsweise Oracle Database-Fehlermeldungen auf Japanisch erhalten möchten, benötigen Sie NLS_LANG. Sie müssen auch Nicht-Python-Anwendungen wie SQL * Plus berücksichtigen. Daher empfiehlt es sich, diese in NLS_LANG zu verschieben oder sowohl NLS_LANG als auch Codierung festzulegen.

sample05c.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION, encoding="UTF-8") as connection:

Recommended Posts

[Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten
[Einführung in cx_Oracle] (16.) Umgang mit LOB-Typen
[Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung
[Einführung in cx_Oracle] (17.) Datumsbehandlung
[Einführung in cx_Oracle] (Teil 7) Umgang mit Bindevariablen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
[Einführung in Data Scientist] Grundlagen von Python ♬
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
[Einführung in cx_Oracle] (Teil 11) Grundlagen der PL / SQL-Ausführung
Serie: Einführung in den Inhalt von cx_Oracle
[Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge
[Einführung in cx_Oracle] (10.) Aktualisieren Sie die DML-Anweisung und die DDL / DCL-Anweisung
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Datenverarbeitung 2 Analyse verschiedener Datenformate
Von der Einführung von JUMAN ++ bis zur morphologischen Analyse von Japanisch mit Python
[Einführung in cx_Oracle] (Teil 2) Grundlagen zum Verbinden und Trennen mit Oracle Database
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.1-8.2.5)
[Einführung in Python3, Tag 17] Kapitel 8 Datenziele (8.3-8.3.6.1)
[Einführung in Python3 Tag 19] Kapitel 8 Datenziele (8.4-8.5)
[Einführung in die Udemy Python3 + -Anwendung] 65. Ausnahmebehandlung
[Einführung in Datenwissenschaftler] Grundlagen der Wahrscheinlichkeit und Statistik ♬ Wahrscheinlichkeits- / Wahrscheinlichkeitsvariable und Wahrscheinlichkeitsverteilung
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
[Einführung in cx_Oracle] (Teil 9) Zuordnung von DB- und Python-Datentypen (Version 8 oder höher)
Einführung in die statistische Modellierung für die Datenanalyse Erweiterung des Anwendungsbereichs von GLM
[Einführung in cx_Oracle] (15.) Erstellen einer Ergebnismenge in einem anderen Format als tapple
Eine Einführung in die Datenanalyse mit Python - Um die Anzahl der Videoansichten zu erhöhen -
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[Einführung in das SEIR-Modell] Versuchen Sie, COVID-19-Daten anzupassen ♬
[Einführung in die Udemy Python3 + -Anwendung] 26. Kopie des Wörterbuchs
Konvertieren Sie Daten mit Form (Anzahl der Daten, 1) in (Anzahl der Daten,) mit numpy.
[Einführung in die Udemy Python3 + -Anwendung] 19. Kopie der Liste
[PyTorch] Einführung in die Klassifizierung japanischer Dokumente mit BERT
[Einführung in Python] Umgang mit Daten im JSON-Format
Einführung von ferenOS 2 (Einstellungen nach der Installation, japanische Eingabeeinstellungen)
Ich möchte die Daten von League of Legends ③ erhalten
Djnago Hinweis Japanisch für Dateinamen für Inhaltsdisposition festlegen
Ich möchte League of Legends-Daten erhalten ①
Von der Einführung von Pyethapp bis zur Vertragsabwicklung
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
Einführung in Deep Learning zum ersten Mal (Chainer) Japanische Zeichenerkennung Kapitel 4 [Verbesserung der Erkennungsgenauigkeit durch Erweiterung der Daten]
Einführung in MQTT (Einführung)
Einführung in Scrapy (3)
Erste Schritte mit Supervisor
Einführung von Scikit-Optimize
Einführung in Tkinter 1: Einführung
Einführung von PyGMT
Einführung in PyQt
Einführung in Scrapy (2)
Datenverarbeitung mit mehreren Bedingungen
[Linux] Einführung in Linux
Einführung in das maschinelle Lernen ~ Zeigen wir die Tabelle der K-Methode für den nächsten Nachbarn ~ (+ Fehlerbehandlung)
Einführung in Scrapy (4)
Einführung in discord.py (2)