Seite 1 von 1

Anführungzeichen in SQL command

Verfasst: Samstag 18. Juni 2022, 05:49
von Ernie1412
wie kriege ich " Zeichen im SQL command, wenn ein value ein ' enthält ?

Code: Alles auswählen

command="""INSERT INTO Scrap_ArtistInfos (ArtistID,low,SettingID,logo,DateiOrdner,Beschreibung) VALUES (NULL,%s,%i,%s,%s,"%s");""" % (low,setting_id,logo,DateiOrdner,Beschreibung,)
ich habs mit f"INSERT ... versucht
ich habs mit "INSERT ....format(...) versucht


wenn ich das wie oben mache, bekomme ich als Ergebnis:

Code: Alles auswählen

'INSERT INTO Scrap_ArtistInfos (ArtistID,low,SettingID,logo,DateiOrdner,Beschreibung) VALUES (NULL,startrek,1,background-image: url(:/Logos/grafics/StarTrek/startrek_90x40.png),Y:\\_Label\\StarTrek,"//div[@class=\'xz1bz0-0 bNiqBh\']/p");'
der macht vor dem ' Zeichen ein \ davor. ... class=\'xz1bz0-0 bNiqBh\']/p...
Beschreibung="//div[@class='xz1bz0-0 bNiqBh']/p"

Keine Ahnung warum, wieso ;(
Welche Möglichkeiten gibts denn noch, um beides " und ' zu adden ?

Re: Anführungzeichen in SQL command

Verfasst: Samstag 18. Juni 2022, 06:10
von sparrow
Man baut keine Values per Stringformatierung in ein SQL-Statement. Niemals. Das ist nicht nur in diesem Fall ärgerlich, das ist vor allem ein riesiges Sicherheitsproblem. Wenn du Usereingaben in SQL-Statements zulässt, steht dem Benutzer damit die Datenbank offen. Stichwort: SQL Injektion.

Erster Anlautpunkt, sollte immer die Dokumentation sein. Und wenn du dir die anschaust, findest du auch, wie man Values in sqlite3 Statements verwendet.

Code: Alles auswählen

statement = "INSERT INTO Scrap_ArtistInfos (ArtistID,low,SettingID,logo,DateiOrdner,Beschreibung) VALUES (?, ?, ?, ?, ?, ?);"
cursor.execute(statement, (None, low, setting_id, logo, datei_ordner, beschreibung))
Ich war so frei und habe gleich die falsch geschrieben Namen angepasst. Namen werden in Python klein_mit_unterstrich geschrieben. Außer Klassen (PascalCase) und Konstanten (KOMPLETT_GROSS).

Bitte verwende SQL Statements immer so. Und ein Blick in die Dokumentation ist zumindest nie hinderlich.

Re: Anführungzeichen in SQL command

Verfasst: Samstag 18. Juni 2022, 08:09
von __blackjack__
Ich würde das mit den Namen auch noch auf die Namen in der Datenbank erweitern, denn SQL unterscheidet nicht zwischen Gross- und Kleinschreibung, und Datenbanken dürfen dementsprechend Namen auch normalisieren und beispielsweise `ArtistID` als `ARTISTID` oder `artistid` anzeigen. Und da ist `ARTIST_ID` oder `artist_id` leichter lesbar, weil man nicht im Kopf anfangen muss die Wortgrenze(n) zu finden.

Re: Anführungzeichen in SQL command

Verfasst: Samstag 18. Juni 2022, 10:01
von Ernie1412
ich benutze QtSQL und SQLite
habs nun mit query.bindValue() hinbekommen.