Vraag Een goede manier om aan offertes te ontsnappen in een queryreeks in de database?


Ik heb allerlei Python-modules geprobeerd en ze ontsnappen te veel of op de verkeerde manier. Wat is de beste manier om te ontsnappen aan aanhalingstekens (",") in Python?


27
2018-05-22 09:16


oorsprong


antwoorden:


Als het deel uitmaakt van een databasevraag, zou u a. Moeten kunnen gebruiken Geparameteriseerde SQL-instructie.

Naast het ontsnappen van uw offertes, zal dit alle speciale karakters behandelen en u beschermen tegen SQL-injectieaanvallen.


24
2018-05-22 09:30



Gebruik json.dumps.

>>> import json
>>> print json.dumps('a"bc')
"a\"bc"

20
2018-02-18 06:25



De eenvoudige en standaard manier om aan strings te ontsnappen en andere objecten naar een programmatische vorm om te zetten, is door de ingebouwde repr () -functie te gebruiken. Het converteert een object naar de representatie die u nodig zou hebben om het in te voeren met handmatige code.

bijv .:

s = "I'm happy I am \"here\" now"
print repr(s)
>>  'I\'m happy I am "here" now'

Geen rare hacks, het is ingebouwd en het werkt gewoon voor de meeste doeleinden.


6
2017-12-03 03:27



Als u psycopg2 gebruikt dat een methode heeft voor het ontsnappen van tekenreeksen: psycopg2.extensions.adapt() Zien Hoe een tekenreekswaarde expliciet te citeren (Python DB API / Psycopg2) voor het volledige antwoord


2
2018-03-11 22:40



Antwoord voor oude discussielijn, maar de beste manier ontbreekt hier nog steeds ..

Als psycopg2 wordt gebruikt, wordt het uitgevoerd, waardoor de methode ontsnapt.

cursor.execute("SELECT column FROM table WHERE column=%s AND column2=%s", (value1, value2))

Merk op dat je twee argumenten geeft om de methode (string en tuple) uit te voeren, in plaats van de% operator van Python te gebruiken om de string te wijzigen.

Antwoord gestolen van hier: psycopg2-equivalent van mysqldb.escape_string?


2
2018-06-18 12:36



Drievoudige dubbele aanhalingstekens zijn het beste om te ontsnappen:

string = "" "Dit gaat over 'enkele aanhalingstekens', 'dubbele aanhalingstekens',
en letterlijke EOL's allemaal in dezelfde string. "" "

1
2018-01-27 01:44



Met drie enkele aanhalingstekens worden de enkele aanhalingstekens die vaak in SQL-query's worden gebruikt, handig ingekapseld:

c.execute('''SELECT sval FROM sdat WHERE instime > NOW() - INTERVAL '1 days' ORDER BY instime ASC''')

1
2018-01-30 23:51



Voor een oplossing voor een meer generiek probleem, heb ik een programma dat ik moest opslaan ieder set tekens in een plat bestand, gescheiden door tabs. Het is duidelijk dat het hebben van tabbladen in de 'set' problemen veroorzaakte.

In plaats van output_f.write (str), heb ik output_f.write (repr (str)) gebruikt, waardoor mijn probleem is opgelost. Het is langzamer om te lezen, omdat ik de invoer moet evalueren () wanneer ik het lees, maar over het algemeen maakt het de code schoner omdat ik niet meer naar marginale zaken hoef te zoeken.


0
2018-03-11 22:28