带有mysql查询插入的Python - 单个参数

问题描述 投票:0回答:2

以下是无效的代码

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

没有连接问题。

它给出以下错误。任何的想法?

回溯(最近一次调用最后一次):文件“./sys-fetchdata.py”,第22行,在cursor.execute(查询,(data ['price']))文件“/usr/lib/python2.7/dist -packages / mysql / connector / cursor.py“,第507行,执行self._handle_result(self._connection.cmd_query(stmt))文件”/usr/lib/python2.7/dist-packages/mysql/connector/connection .py“,第722行,cmd_query结果= self._handle_result(self._send_cmd(ServerCmd.QUERY,query))文件”/usr/lib/python2.7/dist-packages/mysql/connector/connection.py“,第640行,在_handle_result中引发errors.get_exception(包)mysql.connector.errors.ProgrammingError:1064(42000):你的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以便在第1行的“%s”附近使用正确的语法

python mysql insert
2个回答
3
投票

MySQLCursor.execute() methodtuple(或dict)作为第二个(params)论证。

在你的情况下:它应该是(data['price'], )(注意额外的逗号;没有它括号没有效果)而不是(data['price'])


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代码中使用固定查询。
© www.soinside.com 2019 - 2024. All rights reserved.