Seite 1 von 1

Verknüpfung der queries durch join

Verfasst: Donnerstag 13. April 2023, 18:06
von zmo
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

Re: Verknüpfung der queries durch join

Verfasst: Donnerstag 13. April 2023, 19:50
von __deets__
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

Re: Verknüpfung der queries durch join

Verfasst: Donnerstag 13. April 2023, 20:28
von Sirius3
@__deets__: so klar ist das nicht. Ordentliche Datenbanken können das: https://www.crunchydata.com/blog/unders ... stgres_fdw

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 09:10
von zmo
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?

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 09:16
von __deets__
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.

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 09:22
von zmo
Also ich habe eine Verbindung zu MySQL und eine zu ODBC

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 09:44
von grubenfox
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.

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 09:54
von __deets__
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.

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 10:29
von Sirius3
@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.

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 10:45
von zmo
Ich habe mir auch überlegt mit dictionaries zu arbeiten.
Das muss doch auf beiden Tabellen angewendet werden oder?

Re: Verknüpfung der queries durch join

Verfasst: Freitag 14. April 2023, 10:46
von __deets__
Wahrscheinlich. Mit dem bisschen Kontext und ohne konkrete Datenbeispiele kann man nur raten.

Re: Verknüpfung der queries durch join

Verfasst: Sonntag 28. Mai 2023, 08:59
von HeinrichMeyer
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

Re: Verknüpfung der queries durch join

Verfasst: Sonntag 28. Mai 2023, 17:27
von __blackjack__
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.