A primeira opção é a maneira correta de colocar parâmetros de consulta na consulta - ela é chamada de consulta parametrizada . Nesse caso, você está permitindo que o driver de banco de dados escape dos parâmetros de consulta, insira-os com segurança na consulta e lide com as conversões de tipo Python para MySQL.
O erro que você está recebendo significa que não foi possível converter um dos
ID
, Record
, Latitude
, Longitude
ou code
valores de parâmetro para um tipo de banco de dados MySQL válido. Para ser específico, veja os tipos de variáveis que você postou:ID <type 'unicode'>
Record <type 'unicode'>
Latitude <class 'bs4.element.NavigableString'>
Longitude <class 'bs4.element.NavigableString'>
code <type 'unicode'>
O problema é com o
Latitude
e Longitude
- eles são BeautifulSoup
NavigableString
instâncias de classe - o conversor MySQL tendo dificuldades em entender como converter um NavigableString
objeto em um tipo MySQL válido. Converta-os em strings explicitamente de antemão: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))