La première option est la bonne façon de mettre les paramètres de requête dans la requête - c'est ce qu'on appelle une requête paramétrée . Dans ce cas, vous laissez le pilote de base de données échapper aux paramètres de requête, les insérer en toute sécurité dans la requête et gérer les conversions de type Python vers MySQL.
L'erreur que vous obtenez signifie qu'il n'a pas pu convertir l'un des ID
, Record
, Latitude
, Longitude
ou code
valeurs de paramètre à un type de base de données MySQL valide. Pour être précis, consultez les types de variables que vous avez publiés :
ID <type 'unicode'>
Record <type 'unicode'>
Latitude <class 'bs4.element.NavigableString'>
Longitude <class 'bs4.element.NavigableString'>
code <type 'unicode'>
Le problème vient de Latitude
et Longitude
- ils sont BeautifulSoup
NavigableString
instances de classe - le convertisseur MySQL ayant des difficultés à comprendre comment convertir une NavigableString
objet dans un type MySQL valide. Convertissez-les explicitement en chaînes au préalable :
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))