MariaDB / MySQL Befehl für ranking in python

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
Eltert
User
Beiträge: 4
Registriert: Sonntag 13. Februar 2022, 14:34

Hallo,
ich kann via python auf meine DB zugreifen, Einträge vornehmen etc..

Jetzt versuche ich folgenden Befehl in python umzusetzen:

Code: Alles auswählen

UPDATE tabelle_1

  JOIN (SELECT name,
               RANK() OVER (ORDER BY punkte DESC) rank
          FROM tabelle_1
       ) AS ranks ON ranks.name = tabelle_1.name

   SET tabelle_1.rank = ranks.rank
Wie gehe ich hier vor?

Grüße
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Genau so?

Wenn du doch auf deine Datenbank zugreifen kannst, was hindert dich dann daran, genau diesen SQL-Befehl an die Datenbank zu schicken?

Wie greifst du auf die Datenbank zu?
Wie führst du sonst Abfragen aus?

(Ganz abgesehen davon, dass tabelle_1 ein denkbar schlechter Name für eine Relation ist)
Eltert
User
Beiträge: 4
Registriert: Sonntag 13. Februar 2022, 14:34

Sorry, ich bin blutiger Anfänger.

Bisher gehe ich wie folgt vor:

Code: Alles auswählen

import pymysql
....
connection = pymysql.connect(...)
mycursor = connection.cursor()
mycursor.execute("TRUNCATE TABLE example")
connection.close()
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Es ist nicht unüblich in Python ein ORM wie SQLAlchemy zu verwenden um mit Datenbanken zu arbeiten.
SQLAlchemy auch, wenn man rohes SQL mit der Datenbank sprechen möchte um die Connections zu managen.

Aber grundsätzlich bleibt es bei meiner Frage: Wenn du weißt, dass du genau diese Abfrage in der Form brauchst, warum sendest du sie dann nicht an die Datenbank?
Also was geht dabei schief?
Eltert
User
Beiträge: 4
Registriert: Sonntag 13. Februar 2022, 14:34

Ich weiß nicht, WIE ich es senden soll.

Code: Alles auswählen

mycursor.execute("UPDATE tabelle_1

  JOIN (SELECT name,
               RANK() OVER (ORDER BY punkte DESC) rank
          FROM tabelle_1
       ) AS ranks ON ranks.name = tabelle_1.name

   SET tabelle_1.rank = ranks.rank")
So geht's (sicherlich) nicht...
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Mal ein Grundlagentutorial von Python durcharbeiten lohnt sich. Dann lernst du unter anderen, dass mit ''' oder """ mehrzeilige String literale erstellt werden können.
Eltert
User
Beiträge: 4
Registriert: Sonntag 13. Februar 2022, 14:34

Das hat funktioniert. Danke.
Antworten