Python mysql ucieczki ze znaków specjalnych
Używam Pythona do wstawiania ciągu znaków w MySQL ze znakami specjalnymi.
Linia do wstawienia wygląda następująco:
macaddress_eth0;00:1E:68:C6:09:A0;macaddress_eth1;00:1E:68:C6:09:A1
To jest SQL:
UPGRADE inventory_server
set server_mac = macaddress\_eth0\;00\:1E\:68\:C6\:09\:A0\;macaddress\_eth1\;00\:1E\:68\:C6\:09\:A1'
where server_name = 'myhost.fqdn.com
Kiedy robię aktualizację, pojawia się ten błąd:
ERROR 1064 (42000):
You have an error in your SQL syntax; check the manual that corresponds to your
MySQL server version for the right syntax to use near 'UPGRADE inventory_server
set server_mac = 'macaddress\_eth0\;00\:1E\:68\:C6\:09\' at line 1
Kod Pythona:
sql = 'UPGRADE inventory_server set server_mac = \'%s\' where server_name = \'%s\'' % (str(mydb.escape_string(macs)),host)
print sqltry:
con = mydb.connect(DBHOST,DBUSER,DBPASS,DB);
with con:
cur = con.cursor(mydb.cursors.DictCursor)
cur.execute(sql)
con.commit()
except:
return False
Jak mogę wkleić ten surowy tekst?
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
4 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
powiązanie parametrów
http://www.python.org/dev/peps/pep-0249/#id15
zamiast formatowania parametrów w Pythonie.
Po prostu to zrób:
Następnie:
W ten sposób możesz po prostu potraktować ciąg jako ciąg i pozwolić bibliotece MySQL dowiedzieć się, jak go cytować i uciec.
Ponadto generalnie uzyskujesz lepszą wydajność (ponieważ MySQL może kompilować i buforować pojedyncze zapytanie i używać go ponownie dla różnych wartości parametrów) i unikać
ataki iniekcyjne
http://xkcd.com/327/
SQL (jeden z najczęstszych hacków).
Anonimowy użytkownik
Potwierdzenie od:
Witamy w świecie formatów kodowania ciągów!
>
TL; dr - preferowaną metodą obsługi cudzysłowów i znaków zmiany znaczenia podczas przechowywania danych w kolumnach MySQL jest użycie zapytań parametrycznych i udostępnienie ich sterownikowi MySQLDatabase. Alternatywnie możesz uniknąć cudzysłowów i ukośników, podwajając je przed wstawieniem.
Pełny przykład na dole linku
>
standardowa aktualizacja SQL
>
<pre class="lang-py prettyprint-override">
sparametryzowana aktualizacja SQL
>
<pre class="lang-py prettyprint-override">
Nieprawidłowy kod JSON SQL
>
JSON SQL prawidłowe
>
Konwersja Pythona:
>
<pre class="lang-py prettyprint-override">
Kompletny przykład
>
<pre class="lang-py prettyprint-override">
Anonimowy użytkownik
Potwierdzenie od:
Przykład wstawiania surowego tekstu w Pythonie:
>
Utwórz tabelę w MySQL
:
Kod Pythona
:
Uruchom to, poznaj weekend
dane:
select * from penguins1 ~!@#$%^&*()_+`1234567890-={}|[]\;\':"
Żaden z tych znaków nie został zinterpretowany podczas wstawiania.
Anonimowy użytkownik
Potwierdzenie od: