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))