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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了带有mysql查询插入的Python - 单个参数相关的知识,希望对你有一定的参考价值。

以下是无效的代码

#!/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”附近使用正确的语法

答案

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

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

另一答案

让我们试着找到一个解决方案:

  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代码中使用固定查询。

以上是关于带有mysql查询插入的Python - 单个参数的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在单个查询中将 x 个默认值插入到空 SQLite 表中?

mysql查询一次在单个查询中在多个表中插入记录

带有单个查询的MYSQL多个COUNT()[重复]

MySQL ON DUPLICATE KEY UPDATE 在单个查询中插入多行

在单个查询中将 SQL 关系插入到 2 个表,而不使用 mysql_insert_id()

如何使用带有 Spring JDBC 的 MERGE 语句插入/更新单个记录