SQL Query Unterschied (läuft, generiert Fehler)

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
dll-live
User
Beiträge: 43
Registriert: Dienstag 11. August 2020, 09:25
Wohnort: CH

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
Benutzeravatar
sparrow
User
Beiträge: 4639
Registriert: Freitag 17. April 2009, 10:28

Ist das mySQL / mariaDB? Soweit ich weiß, gibt es kein Binding für Platzhalter für die Lusten, die in "IN" Statements verwendet werden.
Sirius3
User
Beiträge: 18375
Registriert: Sonntag 21. Oktober 2012, 17:20

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)
dll-live
User
Beiträge: 43
Registriert: Dienstag 11. August 2020, 09:25
Wohnort: CH

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
Benutzeravatar
__blackjack__
User
Beiträge: 14336
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

SQLAlchemy.
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Benutzeravatar
__blackjack__
User
Beiträge: 14336
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

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)
    ...
„Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it.“ — Brian W. Kernighan
Antworten