No chavos, nunca formaten cadenas con parámetros. Eso es la entrada a
sql injection. Para eso la api de la base de datos se encarga de hacer ese procesamiento.
Estoy asumiendo que usas la librería mysql.
Así sería un script completo para insert. Si te fijas la fecha lo paso tal cual un objeto date, el api de mysql se encarga de pasarlo a un formato adecuado. Y si te fijas no formateo una cadena con los parámetros recibidos.
Código Python:
Ver originalimport datetime
import mysql.connector
connection = mysql.connector.connect(user='user', password='password', database='database')
cursor = connection.cursor()
dni = 10
nombre = 'George'
apellido = 'Lopez'
fecha_nacimiento = datetime.date(1961, 4, 23)
lugar_nacimiento = 'Mission Hills, California, Estados Unidos'
domicilio = 'California'
sql = """
INSERT INTO alumno
(
dni,
nombre,
apellido,
fecha_nacimiento,
lugar_nacimiento,
domicilio,
e-mail
)
VALUES (
%s,
%s,
%s,
%s,
%s,
%s,
%s,
)
"""
datos = (dni, nombre, apellido, fecha_nacimiento, lugar_nacimiento, domicilio, e_mail)
cursor.execute(sql, datos)
cursor.commit()
cursor.close()
connection.close()
PD: El commit es muy importante.