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: 32
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: 4165
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: 17712
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: 32
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: 13006
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

SQLAlchemy.
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Benutzeravatar
__blackjack__
User
Beiträge: 13006
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)
    ...
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten