MySQL Abfrageergebnis in wx python MessageBox zeigen

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
sharky1001
User
Beiträge: 12
Registriert: Freitag 7. April 2017, 11:27

Guten Tag zusammen,

ich habe Python mit MySQL verbunden und jetzt möchte ich das Ergebnis aus zwei MySQL Spalten in einem Messagebox zeigen. Eigentlich klappt alles nur das Format wie das Ergebnis angezeigt wird gefällt mir nicht. Das Ergebnsis sieht so aus:
((datetime.datetime(2018,3,20,11,42,30), 'durchgelaufen'),)
Das Ergebnis kommt aus zwei MySQL Spalten. Die Erste enthält Datum, zweite String - wie hier im Beispiel 'durchgelaufen'
Eigentlich sollte Python idealerweise folgendes zeigen: 2018.03.21 11:42:30 durchgelaufen

Hier ist mein Code:

Code: Alles auswählen


import pymysql
import wx

db = pymysql.connect("XXXXXX","XX","XXX","XX" )

cursor = db.cursor()

cursor.execute("SELECT * FROM MySQL_Tabelle)

data = str(cursor.fetchall())
app = wx.App()
wx.MessageBox(data , 'Rowdatastream', wx.OK | wx.ICON_INFORMATION)
db.close()

Vielen Dank für die Infos
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@sharky1001: Du mußt Dein Ergebnis so formatieren, wie Du es gerne hättest. In Deinem Fall mußt Du auch noch zusätzlich überlegen, wie Du mehrere Datensätze darstellen willst. *-SELECTS vermeiden und Felder explizit angeben.
sharky1001
User
Beiträge: 12
Registriert: Freitag 7. April 2017, 11:27

Danke für die Antwort Sirius,

ich vermute unter Formatieren meinst du der cursor hier: data = str(cursor.fetchall())

Grüße
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Yupp. Einfach nur eine Liste von Tupeln (das ist das Ergebnis von fetchall) zu einem String zu wandeln ist ein bisschen sehr holzhammerig. Du musst die einzelnen Zeilen oder die Zeile auseinander nehmen, und die einzelnen Spalten-Werte in eine sinnvolle Darstellung bringen. Dazu kannst du string.format verwenden, und gegebenenfalls datetime.strftime fuer die zeit-werte.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: strftime ist unnötig, das geht alles mit format:

Code: Alles auswählen

"{:%Y.%m.%d %H:%M:%S} {}".format(*row)
Antworten