Datensätze verändern/bearbeiten

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
KRM
User
Beiträge: 2
Registriert: Sonntag 9. Februar 2020, 19:11

Guten Abend zusammen! :)

Bin absolute Anfängerin in Sachen Python und SQL. Habe eine Datenbank erhalten, deren Datensätze ich nun bearbeiten soll.
Die Datenbank wurde nicht sauber gepflegt, sodass in einer Zelle keine reinen numerischen Werte stehen, sondern ein Mix aus zwei Werten wie "250 / 400" oder "250 / * " mit einem Sternchen gefüllt sind. Ich soll nun diese Werte trennen und in zwei verschiedene Spalten stecken, sprich der Wert 250 soll in Spalte 1 und Wert 400 in Spalte 2 stehen, der / oder * soll wegfallen. Jedoch habe ich keine Ahnung wie ich das anstellen soll? :shock:
Mir wurde der Tipp gegeben, dies mit Regex eventuell zu lösen, jedoch hat das nur noch mehr Fragezeichen hervorgebracht? :?: :?: :?:

Nun meine Fragen an euch:
1. Ist das mit Regex machbar? Wie würde denn der Code dafür bspw. aussehen? Da Regex sehr schwer verständlich für mich ist :(
2. Gibt es auch eine andere Möglichkeit, die Datensätze zu bearbeiten? Habe nur lauter SQL Befehle gefunden, in denen Datenbanken, Tabellen etc erstellt werden können, jedoch deren Werte direkt so voneinander getrennt zu werden leider nicht.

Ich wäre über jede Hilfe sehr dankbar!
Viele Grüße
KRM :)
Sirius3
User
Beiträge: 18250
Registriert: Sonntag 21. Oktober 2012, 17:20

Welches Datenbanksystem benutzt Du? Fast alle können einfache Stringoperationen direkt durchführen. Was soll denn statt `*` in der zweiten Spalte stehen?
KRM
User
Beiträge: 2
Registriert: Sonntag 9. Februar 2020, 19:11

Ich benutze DB Browser SQLite. Anstelle des '*' soll kein Wert in die zweite Spalte übertragen werden.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich wuerde mir dann eine Funktion schreiben, die einen Wert nimmt, und die nach bestem Wissen und Gewissen in die neuen Werte ueberfuehrt, und die zurueck gibt. Damit kannst du erstmal pruefen, ob das alles so seine Richtigkeit hat, bevor du die tatsaechliche Konvertierung machst.

Code: Alles auswählen

def int_or_none(v):
    try:
        return int(v)
    except:
        return None

def process_value(value):
    # die Zuweisung an exakt zwei Werte ist gewollt, um einen Fehler
    # zu bekommen, wenn es mehr sind - also zB "100 /*/ 200" oder so.
    left, right = [int_or_none(v) for v in in value.split("/")]
    return left, right
Antworten