2017-08-14 6 views
0

は以下パイソン - 単一パラメータが

#!/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() 

MySQLが対応するテーブルおよび列を有するが動作していないコードです。

  • ID(PRIMARY INT AUTO_INCREMENT)
  • 価格(FLOAT)

は接続に問題はありません。

以下のエラーが発生します。何か案が?

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ありがとうございました。これを答えに入れるべきです。これが問題の根源です。 –

答えて

2

MySQLCursor.execute() methodは、第(params)引数としてtuple(又はdict)をとります。

あなたの場合:(data['price'],)(括弧は効果なしの追加のカンマに注意してください)の代わりに(data['price'])のはずです。

+0

ありがとう、これはいくつかの奇妙なバグです。この質問を投稿するまで数時間かかります。 –

+0

私は同意します:エラーメッセージはそれよりも多くの有益でなければなりません... –

1

のは、解決策を見つけるために試してみましょう:

  1. mogrify代わりに、クエリを実行し、それを印刷しないでください。たとえば:

    query = ("INSERT INTO records(price) VALUES(%s) ") 
    query_to_be_executed = cursor.mogrify(query, (data['price'])) 
    print(query_to_be_executed) 
    
  2. 次はbashやphpMyAdminの中に手動で印刷されたクエリを実行し、それを修正してみてください。

  3. 最後に、Pythonコードで固定クエリを使用します。
+0

あなたの答えをありがとう。これはデバッギングプロセスに役立つはずですが、hiroは問題の正確な根拠を指摘していました。 –

+0

[mogrify](http://initd.org/psycopg/docs/cursor.html#cursor.mogrify)は、PostgreSQLデータベースアダプタ 'psycopg 'に固有です。 [MySQL Connector/Python](https://dev.mysql.com/doc/connector-python/en/)には 'mogrify'がありませんので、この質問の文脈では使用できません。 – Odysseas

+0

オデッセイ、私は知らなかった。私はこれが解決策だと知っていますが、作者がPostgreSQLデータベースを使用できるのでしょうか? – tpszer