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

带mysql查询插入的Python-单参数,python,mysql,insert,Python,Mysql,Insert,下面是不起作用的代码 #!/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

下面是不起作用的代码

#!/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(主整数自动增量)
  • 价格(浮动)
没有连接问题

它给出了以下错误。有什么想法吗

回溯(最近一次调用):文件“/sys fetchdata.py”,第行 22,在 cursor.execute(query,(data['price'])文件“/usr/lib/python2.7/dist-packages/mysql/connector/cursor.py”,第行 507,执行中 self.\u handle\u result(self.\u connection.cmd\u query(stmt))文件“/usr/lib/python2.7/dist packages/mysql/connector/connection.py”,第行 722,在cmd_查询中 result=self.\u handle\u result(self.\u send\u cmd(ServerCmd.QUERY,QUERY))文件 “/usr/lib/python2.7/dist-packages/mysql/connector/connection.py”,第行 640,在处理结果中 引发错误。获取异常(数据包)mysql.connector.errors.ProgrammingError:1064(42000):您有一个 SQL语法错误;检查与您的产品相对应的手册 第1行“%s”附近使用的正确语法的MySQL服务器版本


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

  • 不要执行查询,而是
    mogrify
    并打印它。例如:

    query = ("INSERT INTO records(price) VALUES(%s) ")
    query_to_be_executed = cursor.mogrify(query, (data['price']))
    print(query_to_be_executed)
    
  • 接下来,尝试在bash或phpMyAdmin中手动执行打印的查询并修复它

  • 最后,在python代码中使用固定查询

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

  • 不要执行查询,而是
    mogrify
    并打印它。例如:

    query = ("INSERT INTO records(price) VALUES(%s) ")
    query_to_be_executed = cursor.mogrify(query, (data['price']))
    print(query_to_be_executed)
    
  • 接下来,尝试在bash或phpMyAdmin中手动执行打印的查询并修复它

  • 最后,在python代码中使用固定查询
  • 元组
    (或
    dict
    )作为第二个(
    参数
    )参数

    在您的例子中:它应该是
    (data['price'],)
    (注意附加的逗号;没有它,括号无效)而不是
    (data['price'])
    ,将
    元组(或
    dict
    )作为第二个(
    参数
    )参数


    在你的例子中:它应该是
    (data['price'],)
    (注意附加的逗号;没有它,括号就没有效果)而不是
    (data['price'])

    @hiro\u progator谢谢。你应该回答这个问题。这就是问题的根源。@hiro_主角谢谢。你应该回答这个问题。这就是问题的根源。谢谢你的回答。这应该有助于调试过程,但hiro已经指出了问题的确切根源。特定于PostgreSQL数据库适配器
    psycopg
    。没有
    mogrify
    ,因此它不能用于这个问题的上下文。奥德赛,我不知道。我知道这是一种变通方法,但也许作者可以使用PostgreSQL数据库?谢谢你们的回答。这应该有助于调试过程,但hiro已经指出了问题的确切根源。特定于PostgreSQL数据库适配器
    psycopg
    。没有
    mogrify
    ,因此它不能用于这个问题的上下文。奥德赛,我不知道。我知道这是一种权宜之计,但也许作者可以使用PostgreSQL数据库?谢谢,这是一些奇怪的错误。在发布这个问题之前,我花了几个小时。我同意:错误消息应该比它提供的信息多得多…谢谢,这是一些奇怪的错误。在发布这个问题之前花了我几个小时。我同意:错误消息应该比它提供的信息多得多。。。