Seite 1 von 1

SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Donnerstag 29. September 2022, 19:10
von dll-live
Hallo Zusammen.

Kann mir bitte jemand erklären warum das folgende Query funktioniert:

Code: Alles auswählen

query2 = "SELECT Wert FROM Stati WHERE Status NOT Like '%schlossen' and Wert IN ('Fenster_Estrich_rot', 'Fenster_Estrich_weiss')"
DB_Zeiger.execute(query2)
aber das untenstehende Query nicht?

Code: Alles auswählen

query2 = "SELECT Wert FROM Stati WHERE Status NOT Like '%schlossen' and Wert IN (%s)"
IN_Bedingung = "'Fenster_Estrich_rot', 'Fenster_Estrich_weiss'"
DB_Zeiger.execute(query2, IN_Bedingung)
Aktuell verstehe ich den Unterschied nicht...

Besten Dank
Dani

Re: SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Donnerstag 29. September 2022, 19:55
von sparrow
Ist das mySQL / mariaDB? Soweit ich weiß, gibt es kein Binding für Platzhalter für die Lusten, die in "IN" Statements verwendet werden.

Re: SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Donnerstag 29. September 2022, 20:02
von Sirius3
Platzhalter sind für einzelne Werte, nicht für Listen:

Code: Alles auswählen

query = "SELECT Wert FROM Stati WHERE Status NOT Like '%schlossen' and Wert IN (%s, %s)"
bedingung = ['Fenster_Estrich_rot', 'Fenster_Estrich_weiss']
zeiger.execute(query, bedingung)

Re: SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Donnerstag 29. September 2022, 21:02
von dll-live
Hallo Zusammen

@sparrow Es ist MariaDB.

@Sirius3 Besten Dank für das Beispiel, wie mach ich das nun, wenn ich die Anzahl der Werte im IN dynamisch / unterschiedlich ist (z.B.: mal 4 mal 10)?
Gibt es dafür auch noch einen (einfachen) Weg?

Gruss Dani

Re: SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Donnerstag 29. September 2022, 21:55
von __blackjack__
SQLAlchemy.

Re: SQL Query Unterschied (läuft, generiert Fehler)

Verfasst: Freitag 30. September 2022, 12:55
von __blackjack__
Um das mit einem Quelltext-Schnippsel zu unterfüttern (natürlich ungetestet):

Code: Alles auswählen

    ...
    query = select(stati_table.c.wert).where(
        stati_table.c.status.not_like("%schlossen"),
        stati_table.c.wert.in_(
            ["Fenster_Estrich_rot", "Fenster_Estrich_weiss"]
        ),
    )
    result = engine.execute(query)
    ...