¿Cómo puedo escapar de la entrada a una base de datos MySQL en Python3? estoy usando PyMySQL y funciona muy bien, pero cuando trato de hacer algo como:¿Cómo puedo escapar de la entrada a una base de datos MySQL en Python3?
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = '{}'".format(request[1]))
no funcionará si la cadena tiene '
o "
. También probé:
cursor.execute("SELECT * FROM `Codes` WHERE `ShortCode` = %s",request[1])
El problema con esto es que la biblioteca (PyMySQL) utiliza la sintaxis de formato para python2.X, %
, que no funciona más. también encontré esta posible solución
conn.escape_string()
en here, pero no sé dónde poner este código. Esto es todo lo que tengo:
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: lo solucionó! En PyMySQL la manera correcta es la siguiente:
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()
Donde la línea text = conn.escape(request[1])
es lo que se escapa el código. Lo encontré dentro del código PyMySQL. Ahí, request[1]
es la entrada.
Genial. Sin embargo, debes publicar la segunda mitad de tu pregunta como respuesta. Puedes aceptar tu propia respuesta. – Grilse
Vaya, no vi ese botón antes. – user1460016
Si se resuelve, marque su propia pregunta como aceptada. :-) – Jocelyn