W jaki sposób mogę uniknąć wprowadzania danych wejściowych do bazy danych MySQL db w Python3? Używam PyMySQL i działa dobrze, ale gdy próbuję zrobić coś takiego:Jak mogę uniknąć danych wejściowych do MySQL db w Python3?
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = '{}'".format(request[1]))
to nie będzie działać, jeśli ciąg ma '
lub "
. Próbowałem również:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = %s",request[1])
Problem polega na tym, że biblioteka (PyMySQL) wykorzystuje składnię formatowania Python2.x, %
, że już nie działa. Znalazłem także to możliwe rozwiązanie
conn.escape_string()
w here, ale nie wiem gdzie dodać tego kodu. To wszystko co mam:
import pymysql
import sys
conn = pymysql.connect(host = "localhost",
user = "test",
passwd = "",
db = "test")
cursor = conn.cursor()
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = {}".format(request[1]))
result = cursor.fetchall()
cursor.close()
conn.close()
Edit: I rozwiązać go! W PyMySQL właściwa droga jest tak:
import pymysql
import sys
conn = pymysql.connect(host="localhost",
user="test",
passwd="",
db="test")
cursor = conn.cursor()
text = conn.escape(request[1])
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = {}".format(text))
cursor.close()
conn.close()
Jeżeli linia text = conn.escape(request[1])
co wymyka się kod. Znalazłem go w kodzie PyMySQL. Tam wejściem jest request[1]
.
Cool. Powinieneś jednak opublikować drugą połowę swojego pytania jako odpowiedź. Możesz zaakceptować własną odpowiedź. – Grilse
Ups, nie widziałem tego przycisku wcześniej. – user1460016
Jeśli zostanie rozwiązany, oznacz flagę jako zaakceptowane. :-) – Jocelyn