Query in csv-schreiben und Umlaute ersetzen
Verfasst: Mittwoch 19. April 2017, 11:22
Aus einer Oracle Datenbank frage möchte ich eine Abfrage in eine csv-Datei schreiben. Das funktioniert soweit prima und geht auch sehr fix. Jedoch stehe ich nun vor dem Problem, aus einem Feld die Sonderzeichen und Umlaute zu entfernen oder zu ersetzen. Da ich diese Aufgabe in die Query packen wollte um das Python-Skript schmal zu halten, lautet die Abfrage entsprechend für das betreffende Datenbankfeld:
REGEXP_REPLACE(REPLACE(REPLACE(REPLACE(replace(LOWER(pers.name),'ü','ue'),'ä','ae'),'ö','oe'),'ß','ss'), '[^a-z]', '') AS RName
Zunächst möchte ich nur Kleinbuchstaben verwenden (lower) und Sonderzeichen ausschließen (REGEXP mit [^a-z]). Das alleine funktioniert. Dann habe ich über verkettete REPLACE-Befehle in der Query die Sonderzeichen "ersetzt". Auch das wird mit in der Abfrage direkt in der Datenbank korrekt (wie gewünscht) ausgegeben. Leider jedoch nicht mit dem Python-Skript.
Die Query habe ich in einer Textdatei gespeichert und lese ich ein. Irgendwo hakt es doch, oder? Stehe auf dem Schlauch.
REGEXP_REPLACE(REPLACE(REPLACE(REPLACE(replace(LOWER(pers.name),'ü','ue'),'ä','ae'),'ö','oe'),'ß','ss'), '[^a-z]', '') AS RName
Zunächst möchte ich nur Kleinbuchstaben verwenden (lower) und Sonderzeichen ausschließen (REGEXP mit [^a-z]). Das alleine funktioniert. Dann habe ich über verkettete REPLACE-Befehle in der Query die Sonderzeichen "ersetzt". Auch das wird mit in der Abfrage direkt in der Datenbank korrekt (wie gewünscht) ausgegeben. Leider jedoch nicht mit dem Python-Skript.
Die Query habe ich in einer Textdatei gespeichert und lese ich ein. Irgendwo hakt es doch, oder? Stehe auf dem Schlauch.
Code: Alles auswählen
import cx_Oracle
import csv
from datetime import datetime
econnection = cx_Oracle.connect("user/Passwort@Datenbank")
#Datensatzcursor
ecursor = econnection.cursor()
#Datei mit Query öffnen
f1 = open('C:/Python34/Scripts/user2.sql')
esql = f1.read()
f1.close()
#Abfrage ausführen
ecursor.execute(esql)
result = ecursor.fetchall()
print("Es wurden " + str(ecursor.rowcount) + " Datensätze gefunden.")
#Schreiben in csv-Datei
with open('C:/Python34/' + datetime.strftime(datetime.now(),"%Y%m%d%H%M%S") + '_Userdaten.csv','w') as fp:
myfile = csv.writer(fp,delimiter=';',lineterminator='\n',quoting=csv.QUOTE_NONNUMERIC)
myfile.writerow([i[0] for i in ecursor.description])
myfile.writerows(result)
fp.close()
econnection.close