2016-05-02 10 views
2

Ich kann nicht herausfinden, was ich mit dieser insert-Anweisung falsch mache. Der Fehler Ich erhalte ist: "Failed processing format-parameters; %s" % err) mysql.connector.errors.ProgrammingError: Failed processing format-parameters; 'MySQLConverter' object has no attribute '_navigablestring_to_mysql'Fehler bei der Verarbeitung von Formatparametern mit mysql.connector in Python

Die spezifischen Codezeilen sind:

update = '''INSERT INTO myDB.newtable (ID,Record,Latitude,Longitude,code) VALUES (%s,%s,%s,%s,%s)''' 
cursor2.execute(update,(ID,Record,Latitude,Longitude,code)) 
cnx2.commit() 

ich auch dieses Format versucht haben:

update = ("INSERT INTO myDB.newtable (ID,Record,Latitude,Longitude,code) VALUES (%s, %s, %s, %s, %s)")%(ID,Record,Latitude,Longitude,code) 
cursor2.execute(update) 

und erhalten diesen Fehler: mysql.connector.errors.ProgrammingError: 1054 (42S22): Unknown column '45676kb' in 'field list'.

45676kb ist nur ein Teil des gesamten Wertes. Die vollständige Zeichenfolge lautet 45676kb-98734-98734-123nn.

Ich denke, die Syntax des zweiten Versuchs ist richtiger, weil ich zumindest einen SQL-Fehler bekomme, aber ich kann nicht herausfinden, wie ich meine Insert-Anweisung mit mysql.connector richtig formatiere.

+0

Der erste Weg ist der richtige Weg. Was sind die 'ID',' Record', 'Latitude',' Longitude' und 'Code' Werte? – alecxe

+0

'b8a0-4f8fe47a3e82, 4305-bd9d-5cf48c46c0c5, 38,922220, -77,205000, GS05' – user2338089

Antwort

2

Die erste Option ist die korrekte Möglichkeit, Abfrageparameter in die Abfrage zu stellen - sie wird als parametrisierte Abfrage bezeichnet. In diesem Fall lassen Sie den Datenbanktreiber die Abfrageparameter umgehen, fügen sie sicher in die Abfrage ein und verarbeiten die Python-zu-MySQL-Typkonvertierungen.

Der Fehler, den Sie bekommen, bedeutet, dass es nicht eine der ID umwandeln konnte Record, Latitude, Longitude oder code Parameterwerte auf einen gültigen Datenbanktyp MySQL. Um genau zu sein, sehen die Variablentypen, die Sie gebucht haben:

ID  <type 'unicode'> 
Record <type 'unicode'> 
Latitude <class 'bs4.element.NavigableString'> 
Longitude <class 'bs4.element.NavigableString'> 
code  <type 'unicode'> 

Das Problem ist mit Latitude und Longitude - sie sind BeautifulSoup ‚s NavigableString Klasseninstanzen - die MySQL-Wandler mit Schwierigkeiten zu verstehen, wie konvertieren ein NavigableString Objekt in ein gültiger MySQL-Typ. Konvertieren Sie sie vorher explizit in Zeichenfolgen:

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

das sind die Werte für sich:' b8a0-4f8fe47a3e82, 4305-bd9d-5cf48c46c0c5, 38,922220, -77,205000, GS05' – user2338089

+0

@ user2338089 in Ordnung, Lasst uns überprüfen, ob "b8a0-4f8fe47a3e82", "4305-bd9d-5cf48c46c0c5" und "GS05" Strings sind. Könnten Sie auch den 'type (variable)' für alle 5 Variablen posten? – alecxe

+0

Ich bekomme: '' bzw. – user2338089

Verwandte Themen