【问题标题】:update query python mysql.connector更新查询 python mysql.connector
【发布时间】:2022-01-12 02:45:09
【问题描述】:

我正在做一个网络抓取项目,现在我正在尝试将我的数据存储到 MySQL 数据库(远程服务器)中。 我确定数据库配置已完成写入,但我不断收到此错误:

Traceback (most recent call last):
  File "C:**\main.py", line 14, in <module>
    cnx.commit()
File "C:**\mysql\connector\connection_cext.py", line 406, in commit
    self._cmysql.commit()
_mysql_connector.MySQLInterfaceError: Commands out of sync; you can't run this command now

这是我的代码(main.py):

import mysql.connector

cnx = mysql.connector.connect(user='XXXX', password='XXXXX',
                              host='XXXXXXXX',
                              database='sql4456946')
cursor = cnx.cursor()

maxID = ("SET @lastid = (SELECT MAX(`id`) FROM `stand`); "
         "UPDATE `stand` SET `price` = 9999 WHERE `id` = @lastid")
cursor.execute(maxID)
cnx.commit()

【问题讨论】:

    标签: python mysql mysql-connector


    【解决方案1】:

    你有一个多重查询,所以你必须使用connection string中的参数

    但你只能在一个查询中完成

    CREATE TABLE stand(id int ,price DECIMAL(19,2) )
    
    INSERT INTO stand VALUES (1,100)
    
        UPDATE `stand` SET `price` = 9999 WHERE `id` = (SELECT MAX(`id`) FROM (SELECT `id` FROM `stand`)  st)
    
    SELECT * FROM stand
    
    编号 |价钱 -: | ------: 1 | 9999.00

    db小提琴here

    【讨论】:

    • 我已经检查了文档,但我仍然不明白您在查询末尾添加的“st”是什么。只是说它是一个多查询吗?但它现在可以使用它了,谢谢!
    • mysql 不喜欢更新表并在子查询中使用它,这就是为什么您需要一个使用 (SELECT id FROM stand) st 创建的临时表,而 st 就是那个临时表。为了进一步理解它,更新会更改行,以便子选择的结果可以更改,a'创建的临时表是固定的,不会被更新更改,它现在是确定性的
    猜你喜欢
    • 2016-02-03
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2017-02-25
    • 1970-01-01
    相关资源
    最近更新 更多