Forum: PC-Programmierung Inhalt einer Mysql Zelle ausgeben Python


von python_Anfänger (Gast)


Lesenswert?

Guten Abend,
ich spiele gerade zum ersten Mal mit Python 3.
Ich habe eine Mysql Datenbank mit einer Tabelle in der 3 Spalten 
definiert sind. ID TIMESTAMP WERT.
Nun möchte ich mit Python den Inhalt der zuletzt geschriebenen ID Zelle 
ausgeben.

Ich kann mit
1
mycursor = mydb.cursor()
2
3
mycursor.execute("SELECT * FROM raspi16 WHERE ID = (SELECT MAX(ID) FROM raspi16)") 
4
myresult = mycursor.fetchall()
5
print(myresult)
6
print"-------------------------------------------------------------------------------------------"

Den inhalt aller zu letzt geschriebenen Zeile ausgeben aber ich möchte 
nur den Inhalt von der ID Zelle ausgeben.

von Rausprüfer (Gast)


Lesenswert?

select MAX(ID) from raspi16;

von Rausprüfer (Gast)


Lesenswert?

python_Anfänger schrieb:
> Nun möchte ich mit Python den Inhalt der zuletzt geschriebenen ID Zelle
Wobei das hier wieder was anderes ist als der maximale ID-Wert.
Bei einem update bleibt die ID erhalten, dann musst du den neuesten 
Timestamp suchen.

von IT-Abteilung (Gast)


Lesenswert?

ORDER BY ID DESC LIMIT 1

Solche Probleme löst man direkt in MySQL/MariaDB und nicht umständlich 
in Python. Immer nur soviel von der Datenbank abfragen, wie wirklich 
benötigt wird.

von python_Anfänger (Gast)


Lesenswert?

Rausprüfer schrieb:
> select MAX(ID) from raspi16;

Funktioniert so leider nicht. Irgendwas mache ich falsch

Rausprüfer schrieb:
> Wobei das hier wieder was anderes ist als der maximale ID-Wert.
> Bei einem update bleibt die ID erhalten, dann musst du den neuesten
> Timestamp suchen.

Es werden keine Updates der Einträge gemacht.
Danke für die Hilfe

von Rausprüfer (Gast)


Lesenswert?

Gebe mal ein Beispiel was du genau haben willst.

Folgende Beispieltabelle:

ID |  TIMESTAMP         | WERT
------------------------+-----
1  | 2020-01-01 01:01:00| 10
2  | 2020-11-11 11:11:11| 20
3  | 2020-01-01 01:01:00| 30


Was willst du jetzt als Ergebniss?
ID
---
3

Genau das liefert
select MAX(ID) from raspi16;

Willst du die ID die nach Timestamp am aktuellsten ist wäre das
ID
2


BTW: Es ist eine schlechte Idee eine Spalte nach einem SQL-Befehl/Typ zu 
benennen. Nenn es "Zeitstempel" oder sonst irgendwie das nicht Teil der 
SQL-Syntax ist.

von Heiner (Gast)


Lesenswert?

python_Anfänger schrieb:
> Funktioniert so leider nicht.

Das ist - wie immer - keine Beschreibung eines Problems. Ein sinnvolles 
Schema ist:
- Was hast du gemacht?
- Was hast erwartet, was passieren sollte?
- Was ist stattdessen passiert?

von python_Anfänger (Gast)


Lesenswert?

Guten Morgen,
Sorry war gestern wohl schon zu betrunken:/

Rausprüfer schrieb:
> Was willst du jetzt als Ergebniss?
> ID
> ---
> 3

Ja genau das möchte ich! Danke

Heiner schrieb:
> Das ist - wie immer - keine Beschreibung eines Problems. Ein sinnvolles
> Schema ist:
> - Was hast du gemacht?
> - Was hast erwartet, was passieren sollte?
> - Was ist stattdessen passiert?

Sorry aber ich war gestern nicht mehr ganz klar im Kopf.
Also es funktioniert fast so wie es funktionieren soll.
Mein Skript
1
print"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  
2
mycursor.execute("select MAX(ID) from raspi16")
3
myresult = mycursor.fetchall()
4
print(myresult)
5
print"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
6
mydb.close()
liefert
1
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
2
[(35,)]
3
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Ich möchte aber die Klammern und das Komma weg haben.
Danke für die Hilfe

von python_Anfänger (Gast)


Lesenswert?

Kann mir Jemand ein Gutes Buch empfehlen um Python zu lernen?

von Codo (Gast)


Lesenswert?

Rausprüfer schrieb:
> select MAX(ID) from raspi16;

Semikolon?

von python_Anfänger (Gast)


Lesenswert?

Codo schrieb:
> Semikolon?

Was meinst du damit?

von Codo (Gast)


Lesenswert?

python_Anfänger schrieb:
> Codo schrieb:
>> Semikolon?
>
> Was meinst du damit?

Die Bemerkung ging nicht an dich, sondern an "Rausprüfer".
So weit ich weiss, wird in Python eine Zeile NICHT mit Semikolon 
beendet.

von Heiner (Gast)


Lesenswert?

python_Anfänger schrieb:
> Ich möchte aber die Klammern und das Komma weg haben.
1
print(myresult[0][0])

Auch wenn du nur einen einzigen Wert bekommst: Das Ergebnis der 
Datenbankabfrage hat Zeilen und Spalten. Python macht daraus eine Liste 
von Tupeln. Meine Empfehlung wäre, einmal folgendes im CLI 
auszuprobieren:
1
myresult = [(35,)]
2
type(myresult)
3
myresult[0]
4
type(myresult[0])
5
myresult[0][0]
6
type(myresult[0][0])

Die dynamische Typisierung von Python ist oft eine praktische Sache. Die 
Folge ist allerdings, dass man sich selbst mehr Gedanken über Datentypen 
machen muss.

von Ingo D. (ingo2011)


Lesenswert?

.. probier mal

print(myresult[0])

Du bekommst ein Array zurück
sh. auch

https://pynative.com/python-cursor-fetchall-fetchmany-fetchone-to-read-rows-from-table/

von IT-Abteilung (Gast)


Lesenswert?

Codo schrieb:
> So weit ich weiss, wird in Python eine Zeile NICHT mit Semikolon
> beendet.

MUSS nicht, aber es geht und sieht meiner Meinung nach ordentlicher aus.

von Karl Käfer (Gast)


Lesenswert?

IT-Abteilung schrieb:
> Codo schrieb:
>> So weit ich weiss, wird in Python eine Zeile NICHT mit Semikolon
>> beendet.
>
> MUSS nicht, aber es geht und sieht meiner Meinung nach ordentlicher aus.

Es ist aber gar kein Python-, sondern SQL-Code. Wenn ein einzelner 
Befehl mit einer Client-Library ausgeführt wird, kann man das Semikolon 
weglassen, der Befehl wird ja ohnehin gequotet.

von Codo (Gast)


Lesenswert?

IT-Abteilung schrieb:
> Codo schrieb:
>> So weit ich weiss, wird in Python eine Zeile NICHT mit Semikolon
>> beendet.
>
> MUSS nicht, aber es geht und sieht meiner Meinung nach ordentlicher aus.

Das wusste ich nicht, sorry. Ich nehme meine Bemerkung zurück!

von Heiner (Gast)


Lesenswert?

Ingo D. schrieb:
> Du bekommst ein Array zurück

Nein. Er bekommt eine Liste von Tupeln, beides native Datentypen von 
Python.

https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range

Arrays gibt es in Python nicht nativ. NumPy hat so etwas (ndarray), aber 
das ist definitiv nicht der Typ, den fetchall zurückgibt:

https://numpy.org/doc/stable/reference/generated/numpy.ndarray.html

von Εrnst B. (ernst)


Lesenswert?

Heiner schrieb:
> Nein. Er bekommt eine Liste von Tupeln, beides native Datentypen von
> Python.

womit wir wieder hier wären:

python_Anfänger schrieb:
> Kann mir Jemand ein Gutes Buch empfehlen um Python zu lernen?

Da werden dann hoffentlich auch Fragen wie "ich möchte auf den ersten 
und einzigen Listen-Eintrag zugreifen" geklärt.

von Sheeva P. (sheevaplug)


Lesenswert?

python_Anfänger schrieb:
> Kann mir Jemand ein Gutes Buch empfehlen um Python zu lernen?

Wenn Du ein totaler Einsteiger bist und keine bis wenig Erfahrung mit 
anderen Sprachen hast, aber auch nicht so sehr tief einsteigen möchtest, 
ist die "For Dummies"-Serie immer ganz gut. Da gibt es eine ganze Reihe 
von Python-Büchern, such' Dir einfach eines aus und spiel' mit den 
Beispielen herum, dann kommst Du sicher schnell hinein.

Ansonsten ist man, wenn man etwas Seriöses zu Softwarethemen sucht, 
meistens beim Verlag O'Reilly ganz gut aufgehoben, aber gerade für 
Python gibt es dort so viel...

Mein Einstieg (vor vielen Jahren) waren "Learning Python" und danach 
"Programming Python", beide O'Reilly von Mark Lutz. Ein wenig trocken, 
aber für Menschen mit ein wenig Vorerfahrung (ich kam damals 
skriptsprachenseitig von Perl) gut geeignet. Für einige weitere Tipps 
und Tricks passen dazu der "Hitchhiker's Guide to Python" und das 
"Python Cookbook".

Ebenfalls bei O'Reilly erschienen ist "Programmieren lernen mit Python" 
von Allen B. Downey, und wer es etwas verspielter, aber didaktisch 
hervorragend aufbereitet und schnell vom Anfänger zum Intermediate 
werden mag, probiert "Python von Kopf bis Fuß" aus. Beide Bücher kenne 
ich selbst zwar nicht, allerdings habe ich von beiden viel Gutes gehört, 
und die "von Kopf bis Fuß"-Serie hat sich mittlerweile einen sehr guten 
Ruf erarbeitet.

Wenn Du ein bisschen Python-Erfahrung gesammelt hast und wirklich in die 
Tiefen gehen willst, gibt es neben Büchern zu allerlei Spezialthemen 
(Datenverarbeitung mit Pandas, Webentwicklung mit Django und Flask, ...) 
auch noch ein besonderes Buch namens "Fluent Python", das auch für sehr 
erfahrene Pythonistas viele wertvolle Ideen und Anregungen liefert.

Worauf Du achten solltest, ist, daß das gewählte Buch Python3 behandelt. 
Und das solltest Du auch benutzen, denn die Vorversion Python2 ist zwar 
hin und wieder noch im Einsatz, aber mittlerweile veraltet. Auch wenn 
die Unterschiede nicht sehr groß sind: Python3 ist die Zukunft...

HTH, viel Spaß und Erfolg! ;-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.