La primera opción es la forma correcta de poner parámetros de consulta en la consulta:se denomina consulta parametrizada . En este caso, está permitiendo que el controlador de la base de datos escape de los parámetros de consulta, los inserte de forma segura en la consulta y maneje las conversiones de tipo Python a MySQL.
El error que está recibiendo significa que no pudo convertir uno de los ID
, Record
, Latitude
, Longitude
o code
valores de parámetro a un tipo de base de datos MySQL válido. Para ser específicos, vea los tipos de variables que ha publicado:
ID <type 'unicode'>
Record <type 'unicode'>
Latitude <class 'bs4.element.NavigableString'>
Longitude <class 'bs4.element.NavigableString'>
code <type 'unicode'>
El problema es con Latitude
y Longitude
- son BeautifulSoup
NavigableString
instancias de clase:el convertidor de MySQL tiene dificultades para entender cómo convertir un NavigableString
objeto en un tipo MySQL válido. Conviértalos en cadenas explícitamente de antemano:
update = """
INSERT INTO
myDB.newtable
(ID,Record,Latitude,Longitude,code)
VALUES
(%s,%s,%s,%s,%s)
"""
cursor2.execute(update, (ID, Record, str(Latitude), str(Longitude), code))