Verknüpfung der queries durch join

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
zmo
User
Beiträge: 4
Registriert: Donnerstag 13. April 2023, 17:55

Hallo,

ich habe eine Verbindung zu zwei verschiedenen Datenbankservern hererstellt gehabt und habe dementsprechend zwei verschiedene cursor zu den jeweiligen Datenbanken aufgesetzt. Jetzt mache ich 2 verschiedene queries, wobei eine query aus der einen Tabelle der Datenbank und die andere aus der anderen Tabelle der anderen Datenbank kommt. Beide Tabelle haben eine gemeinsame Spalte und ich will sie jetzt joinen. Kann mir jemand dabei helfen wie man das in Python umsetzt?

LG
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Also das es mit SQL direkt nicht geht, ist wahrscheinlich klar? Pandas dataframes sollten das Können. https://pandas.pydata.org/docs/referenc ... .join.html
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@__deets__: so klar ist das nicht. Ordentliche Datenbanken können das: https://www.crunchydata.com/blog/unders ... stgres_fdw
zmo
User
Beiträge: 4
Registriert: Donnerstag 13. April 2023, 17:55

Also ich habe folgendes:

Code: Alles auswählen

cursor 1. execute('select type, descr from tt_tariff_type')
cursor 2. execute('select use_type, volume from cdr group by 1')
Jetzt will ich die beiden queries mit einem join über verknüpfen sowas wie:

Code: Alles auswählen

Select descr, type, volume from tt_tariff_type join cdr on type=usage_type group by type
Ich wollte das ohne pandas machen. Gibt es ne andere Möglichkeit?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wenn du Postgres hast, dann scheinen die da was zu haben. Wenn nicht: welche hast du, und bietet die sowas an? Allgemein geht es eben nicht. Da muss es schon durch Nachbearbeitung sein.
zmo
User
Beiträge: 4
Registriert: Donnerstag 13. April 2023, 17:55

Also ich habe eine Verbindung zu MySQL und eine zu ODBC
Benutzeravatar
grubenfox
User
Beiträge: 426
Registriert: Freitag 2. Dezember 2022, 15:49

zmo hat geschrieben: Freitag 14. April 2023, 09:10 Ich wollte das ohne pandas machen. Gibt es ne andere Möglichkeit?
eine Möglichkeit beginnt mit so etwas wie...

Code: Alles auswählen

def join (cursor1, cursor2):
also die Verknüpfung 'händisch' ausprogrammieren. Aber das wird vermutlich weder schön, noch besonders schnell.
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

zmo hat geschrieben: Freitag 14. April 2023, 09:22 Also ich habe eine Verbindung zu MySQL und eine zu ODBC
Dann nicht. Du wirst das programmieren müssen. Pandas macht das leichter.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@zmo: die Frage ist, wie Du mit den Daten weiterarbeiten willst. Pandas wurde ja schon angesprochen. Die händische Variante wäre, eine von beiden Tabellen in ein Wörterbuch zu verwandeln, und einfach benutzen.
zmo
User
Beiträge: 4
Registriert: Donnerstag 13. April 2023, 17:55

Ich habe mir auch überlegt mit dictionaries zu arbeiten.
Das muss doch auf beiden Tabellen angewendet werden oder?
__deets__
User
Beiträge: 14528
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wahrscheinlich. Mit dem bisschen Kontext und ohne konkrete Datenbeispiele kann man nur raten.
HeinrichMeyer
User
Beiträge: 18
Registriert: Sonntag 20. September 2020, 14:20

Also - ohne Werbung machen zu wollen - schmöker 'mal in:
"Schrödinger programmiert Python (Das etwas andere Fachbuch)"
Hier ist (fast) alles erläutert.
Gruß Bossy39
IngData-Henry
Benutzeravatar
__blackjack__
User
Beiträge: 13077
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Ich habe mir mal die Codebeispiele zum Buch angeschaut — da sind wie üblich ein paar gruselige Sachen dabei. Würde ich nicht uneingeschränkt empfehlen.

Es wird sich bei der Namensgebung nicht durchgehend an klein_mit_unterstrichen gehalten, es gibt hier und da dann auchMalMixedCase-Namen. Und so Namenszusätze wie `mein_*` oder `meine_*` werden auch nicht wirklich dadurch besser, dass sie Deutsch sind.

Doppelte führende Unterstriche. Die Datei dazu heisst ``PublicPrivate.py``.

Property wird am Anfang nicht als Dekorator verwendet, sondern wie gaaanz früher mit Methoden aufgerufen, die zudem dann auch noch öffentlich sind.

Komische Typtests die zu komischen Ergebnissen führen, zum Beispiel das die Methode `vedoppeln()` `None` zurück gibt, falls das Argument kein `int` oder `float` ist (mit `type()` getestet, also nicht mal abgeleitete Typen können verdoppelt werden). Oder das eine Zuweisung an ein Property nur mit von `list` und `tuple` abgeleiteten Typen funktioniert und sonst einfach ignoriert wird.

Die Vererbungsbeispiele sind kaputt, weil da wieder ein unnötiger und einschränkender Typtest drin ist, der dafür sorgt, das ein Attribut am Ende undefiniert ist was dann zwangsläufig zu einem Folgefehler führt. Und statt da in der abgeleiteten Klasse die `__init__()` von der Basisklasse aufzurufen, steht der nötige Code um das Exemplar zu initialisieren noch mal in der abgeleiteten Klasse.

Das Beispiel für eine Textdatei öffnet die ohne Kodierungsangabe — Und schreibt dann Text rein der nicht nur aus ASCII-Zeichen besteht.

Texte ohne Zeilenenden werden mit "\n".join(…) zusammengefügt und in eine Datei geschrieben — womit die letzte Zeile dann nicht sauber mit einem Zeilenende abgeschlossen ist.

Bei den Beispielen für Dateien und Ordner wird nicht `pathlib` verwendet (das Buch ist von 2021) und zeigt wie man sich mit `os.chdir()` durch Verzeichnisse bewegt. Yeah.

Das Tk-Beispiel für mehrere Fenster erzeugt mehrere `Tk`-Objekte. 🤦

Bei den Datenbankbeispielen ist die Bennennung Einzahl/Mehrzahl bei den Tabellen inkonsistent. Es wird ein TEXT-Feld als Primär- und Fremdschlüssel verwendet, wobei das der Name eines Virus ist. Das heisst man kann Virennamen nicht mehr einfach ändern.

CSV-Datei wird auch ohne Kodierungsangabe geöffnet und mit ``newline='\n'`` wo die Dokumentation ausdrücklich sagt, dass dort die leere Zeichenkette gesetzt werden muss.

Ach so: Nackte ``except:`` gibt's natürlich auch.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten