Seite 1 von 1

Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 15:58
von Stephan_2021
Hallo,

in nutze folgende Python-Funktion:

Code: Alles auswählen

import mysql.connector as mc

def get_data_for_grid(host, port, user, password, database, sql):
    connection = mc.connect(host = host,
        port = port,
        user = user,
        password = password,
        database = database)

    cursor = connection.cursor()
    cursor.execute(sql)

    resultraw = cursor.fetchall()
    result = [tuple(str(item) for item in t) for t in resultraw]
    cursor.close()
    connection.close()

    return result
result enthält dabei jedoch Einträge der Forme 'None' wenn Felder des Ergebnisses NULL sind.

Wie muss ich die Zeile:

Code: Alles auswählen

result = [tuple(str(item) for item in t) for t in resultraw]
ändern, damit statt 'None' ein Leerstring zurückgeliefert wird?


Anders gesagt, die Funktion liefert derzeitig z.B.:
('1', '123', 'Schmidt', '', 'None', 'None', 'None', 'None', 'Bahnstr. 05', '10117', 'Berlin', 'None', '123', 'None', 'Schmidt', '123', 'None', 'None', 'None', 'de', 'Freiberufler', 'None', '75834', '123', 'IT', '1*', 'None')

und ich hätte stattdessen gern:
('1', '123', 'Schmidt', '', '', '', '', '', 'Bahnstr. 05', '10117', 'Berlin', '', '123', '', 'Schmidt', '123', '', '', '', 'de', 'Freiberufler', '', '75834', '123', 'IT', '1*', '')



Gruß
Stephan

Re: Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 16:11
von __blackjack__
@Stephan_2021: Du musst halt für jeden Wert prüfen ob er `None` ist, mit ``is None`` und dementsprechend entweder in eine Zeichenkette wandeln, oder eine leere Zeichenkette verwenden. Beispielsweise mit einem bedingten Ausdruck:

Code: Alles auswählen

from contextlib import closing

from mysql.connector import connect


def get_data_for_grid(host, port, user, password, database, sql):
    with connect(
        host=host, port=port, user=user, password=password, database=database
    ) as connection:
        with connection.cursor() as cursor:
            cursor.execute(sql)
            return [
                tuple((str(item) if item is not None else "") for item in row)
                for row in cursor.fetchall()
            ]

Re: Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 16:15
von Sirius3
Warum willst Du alles als Strings haben? Es hat ja einen Sinn, dass da verschiedene Typen in der Datenbank stehen.
Für Entscheidungen gibt es if und auf None prüft man mit `is None`.

Re: Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 16:25
von Stephan_2021
Warum willst Du alles als Strings haben?
Weil ich Python benutze um das Einfügen eines Resultsets in ein Grid auf einem Dialog von LibreOffice (http://www.openoffice.org/api/docs/comm ... le-ix.html) zu beschleunigen und ich in dieses Grid ohnehin nur Strings eintragen kann.

Ich bin offen für jede andere Lösung, nur meine Daten müssen sehr schnell von einer MySQL-DB in ein LO-Grid.


Gruß
Stephan

Re: Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 16:42
von Stephan_2021
__blackjack__ hat geschrieben: Sonntag 25. Juli 2021, 16:11 @Stephan_2021: Du musst halt für jeden Wert prüfen ob er `None` ist, mit ``is None`` und dementsprechend entweder in eine Zeichenkette wandeln, oder eine leere Zeichenkette verwenden. Beispielsweise mit einem bedingten Ausdruck:

Code: Alles auswählen

from contextlib import closing

from mysql.connector import connect


def get_data_for_grid(host, port, user, password, database, sql):
    with connect(
        host=host, port=port, user=user, password=password, database=database
    ) as connection:
        with connection.cursor() as cursor:
            cursor.execute(sql)
            return [
                tuple((str(item) if item is not None else "") for item in row)
                for row in cursor.fetchall()
            ]
Danke, das funktioniert gut. Mich überrascht das diese Auswertung/Umwandlung kaum mehr Zeit benötigt als die ursprüngliche Version - Prima. Ich muss aber noch eingehender mit größeren Datenmengen testen.


Gruß
Stephan

Re: Ergebnis von MySQL-Abfrage mittels tuple aufbereiten/anpassen

Verfasst: Sonntag 25. Juli 2021, 17:06
von Stephan_2021
Ich muss aber noch eingehender mit größeren Datenmengen testen.
auch mit größeren Datenmengen (5000 Datensätze mit je 27 Feldern) ist das angenehm schnell

Danke, nochmals.


Gruß
Stephan