Forum: PC-Programmierung Inhalt einer Mysql Zelle ausgeben Python


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von python_Anfänger (Gast)


Bewertung
0 lesenswert
nicht 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
mycursor = mydb.cursor()

mycursor.execute("SELECT * FROM raspi16 WHERE ID = (SELECT MAX(ID) FROM raspi16)") 
myresult = mycursor.fetchall()
print(myresult)
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)


Bewertung
0 lesenswert
nicht lesenswert
select MAX(ID) from raspi16;

von Rausprüfer (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
1 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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
print"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  
mycursor.execute("select MAX(ID) from raspi16")
myresult = mycursor.fetchall()
print(myresult)
print"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 
mydb.close()
liefert
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[(35,)]
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

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

von python_Anfänger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Kann mir Jemand ein Gutes Buch empfehlen um Python zu lernen?

von Codo (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Rausprüfer schrieb:
> select MAX(ID) from raspi16;

Semikolon?

von python_Anfänger (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Codo schrieb:
> Semikolon?

Was meinst du damit?

von Codo (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
python_Anfänger schrieb:
> Ich möchte aber die Klammern und das Komma weg haben.
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:
myresult = [(35,)]
type(myresult)
myresult[0]
type(myresult[0])
myresult[0][0]
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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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! ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.