SQL Ergebnis in weiteren Query verwenden

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Hallo,

ich möchte mit dem Ergebnis eines Querys einen weiteren Query erstellen bzw. ausführen. Leider bekomme ich das Ergebnis nicht in eine String damit ich diesen in dem neuen Query nutzen kann:

hier ein Ausschnitt aus meinem Code:

Code: Alles auswählen

query: str = "SELECT DISTINCT TH.HZ_ID FROM TEAMS T INNER JOIN Team_Helfer TH ON TH.Team_ID = T.ID \
    WHERE T.StartDatum_Ist >= '"+str(start)+"' AND T.StartDatum_Ist <= '"+str(end)+"' \
    AND TH.Satz_ID IN ("+str(Teambonusbunker)+")"


    fbird = fbconn.cursor()
    fbird.execute(query)
    hzids = fbird.fetchall()
    print(hzids)




   #for row in hzids:
          #  print(row)

    queryteamid = "SELECT DISTINCT TH.Team_ID FROM Team_Helfer TH INNER JOIN Teams T ON T.ID = TH.Team_ID WHERE T.StartDatum_Ist >= '"+str(start)+"' AND T.StartDatum_Ist <= '"+str(end)+"' \
     AND HZ_ID IN ("+str(hzids)+" ORDER BY Team_ID"

    fbird = fbconn.cursor()
    fbird.execute(queryteamid)


Kann mir jemand den passenden Tip geben was ich machen muss?

Im Moment bekomme ich einen Dynamic SQL Error. Das liegt aber daran denke ich das ich nun eine Liste in mein SQL einfüge???
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du hast doch an anderer Stelle schon parametrisierte SQL queries verwandt. Warum ploetzlich dieses grauenvolle String-Gemansche?

Und ein SQL Ergebnis mit fetchall ist eine Liste von Tupeln. Die kannst du nicht einfach per Holzhammer in einen String wandeln, und hoffen, dass das dann schon geht.

Wenn es nur darum geht, die Menge der IDs aus einem Query in dem anderen zu benutzen, dann sollte das einfach ein Sub-Query sein. Das spart sowohl Python als auch der Datenbank Arbeit.
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Hallo Danke für deine Antwort,

ich brauche 2 Querys, weil ich die ID's benötige sowie die ID's wieder in einem weiteren Query nutzen möchte.

Genau das ist ja mein Problem, wie demontiere ich den Tuple, das ich Ihn im Query wieder verwenden kann?
cbesi
User
Beiträge: 41
Registriert: Dienstag 11. August 2020, 22:04

Habe es gelöst....

Code: Alles auswählen

    tuples = hzids

    tuple_strings = ['(%s)' % tuple for tuple in tuples]

    result = ', '.join(tuple_strings)
    print('Ergebnis')
    print(result)
    
    
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Wie ich schon sagte: du kannst die queries in einem laufen lassen, weil SQL subqueries kennt.
Sirius3
User
Beiträge: 17710
Registriert: Sonntag 21. Oktober 2012, 17:20

@cbesi: wie schon geschrieben, man formatiert keine Ergebnisse in eine SQL-Abfrage hinein!
Kannst Du mal Deine Tabellenstruktur beschreiben und sagen, welche Informationen Du mit diesen Abfragen erhalten möchtest? Also nicht auf technischer Ebene, sondern von der Anwendersicht aus?
Antworten