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