variable in sql-Abfrage

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
puba
User
Beiträge: 13
Registriert: Dienstag 22. Juli 2008, 18:53

Hallo,
wie muss die Syntax in einer SQL-Anfrage richtig heissen, wenn ich eine Variable einbaue?

Code: Alles auswählen

 

.........
   ant = raw_input("Welche Automarke? ")
   print ant

   qry1 = "SELECT id, name, typ, price FROM cars WHERE name LIKE "
#   qry2 = "'%iat'"
   qry2 = "'ant'"

   cur.execute(qry1+qry2)

   for a in cur:
      print (a)
   con.commit()
Wenn ich für qry2 "'%fiat'" fest einsetze, funntionierts.
Wie muss die Variable "ant" in der qry2 eingebaut werden?
Zuletzt geändert von Anonymous am Donnerstag 19. Juli 2012, 16:28, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
BlackJack

@puba: Das hat erst einmal mit SQL nichts zu tun sondern wie man den einen Wert in eine Zeichenkette formatiert. Das sind Grundlagen zum Zeichenkettentyp. Arbeite dazu am besten mal das Tutorial in der Python-Dokumentation durch.

Wenn dann SQL mit ins Spiel kommt musst Du aufpassen das Du selbst keine Werte in SQL-Abfragen in Form von Zeichenketten hinein formatierst, sondern dass dem Datenbankmodul überlässt. Sonst können Anwender nämlich per SQL-Injection nahezu beliebigen Unsinn mit Deiner Datenbank anstellen. Zum Beispiel bei der Frage nach der Automarke ``'; DROP TABLE cars --`` eingeben und Dir damit die Tabelle löschen.

Um das zu verhindern setzt man im SQL Platzhalter für die Werte und gibt die beim `execute()`-Aufruf als zweites Argument an. Näheres in der Dokumentation des verwendeten DB-Moduls und dem PEP in dem die DB-API beschrieben wird.

Du solltest Dir das Abkürzen von Namen abgewöhnen.
Antworten