2017-08-14 2 views
0

Im Folgenden ist der Code, der nichtPython mit mysql query Einfügung - Einparameter

#!/usr/bin/python 

import urllib 
import datetime 
import mysql.connector 

data['price'] = 100 

# Write to database 
cnx = mysql.connector.connect(user='user', password='pw', database='db') 
cursor = cnx.cursor() 

query = ("INSERT INTO records(price) VALUES(%s) ") 
cursor.execute(query, (data['price'])) 

cnx.commit() 

cursor.close() 
cnx.close() 

arbeitet MySQL die entsprechende Tabelle und Spalte hat.

  • id (PRIMARY INT AUTO_INCREMENT)
  • Preis (FLOAT)

Es gibt keine Verbindung Problem.

Es gibt den folgenden Fehler. Irgendeine Idee?

Traceback (most recent call last): File "./sys-fetchdata.py", line 22, in cursor.execute(query, (data['price'])) File "/usr/lib/python2.7/dist-packages/mysql/connector/cursor.py", line 507, in execute self._handle_result(self._connection.cmd_query(stmt)) File "/usr/lib/python2.7/dist-packages/mysql/connector/connection.py", line 722, in cmd_query result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query)) File "/usr/lib/python2.7/dist-packages/mysql/connector/connection.py", line 640, in _handle_result raise errors.get_exception(packet) mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s)' at line 1

+0

@hiro_protagonist Danke. Sie sollten dies in Antwort setzen. Dies ist, wo das Problem Wurzeln. –

Antwort

2

die MySQLCursor.execute() method nimmt ein tuple (oder ein dict) als zweites (params) Argument.

in Ihrem Fall: es sollte (data['price'],) sein (beachten Sie das zusätzliche Komma; ohne sie haben die Klammern keinen Effekt) anstelle von (data['price']).

+0

Danke, das ist ein seltsamer Fehler. Nimmt mich stundenlang, bevor ich diese Frage stelle. –

+0

ich stimme zu: die Fehlermeldung sollte viel informativer sein als es ist ... –

1

Lassen Sie uns versuchen, eine Lösung zu finden:

  1. Sie Ihre Abfrage nicht ausführen, sondern mogrify und ausdrucken. Zum Beispiel:

    query = ("INSERT INTO records(price) VALUES(%s) ") 
    query_to_be_executed = cursor.mogrify(query, (data['price'])) 
    print(query_to_be_executed) 
    
  2. Nächster Versuch gedruckten Abfrage manuell in bash oder phpMyAdmin und fixiert ihn auszuführen.

  3. Schließlich verwenden Sie feste Abfrage in Ihrem Python-Code.
+0

Danke für Ihre Antwort. Dies sollte dem Debugging-Prozess helfen, aber Hiro hatte die genaue Wurzel des Problems aufgezeigt. –

+0

[mogrify] (http://initd.org/psycopg/docs/cursor.html#cursor.mogrify) ist spezifisch für den PostgreSQL-Datenbankadapter 'psycopg'. [MySQL Connector/Python] (https://dev.mysql.com/doc/connector-python/en/) hat kein 'mogrify', daher kann es nicht für den Kontext dieser Frage verwendet werden. – Odysseas

+0

Odysseas, ich wusste es nicht. Ich weiß, dass dies ein Umweg ist, aber vielleicht kann der Autor die PostgreSQL-Datenbank benutzen? – tpszer