My SQL with Python:选择具有最高值的行并在那里更改值

Posted

技术标签:

【中文标题】My SQL with Python:选择具有最高值的行并在那里更改值【英文标题】:My SQL with Python: Select the row with the highest value and change the value there 【发布时间】:2021-08-23 02:47:27 【问题描述】:

我已经在这里搜索了几个解决方案并试图获得一个有效的代码。除了 where 查询外,一切正常。

在 where 查询中,我搜索最大值(数字)。然而,这并没有真正的工作...... 这是我的代码和mysql数据库的结构。

谢谢!

import pymysql
conn = pymysql.connect(host='localhost', unix_socket='', user='root', passwd='pw', db='database')
cur = conn.cursor()
cur.execute("SELECT * FROM dose")
for r in cur:
    curr = conn.cursor()
    sql = """UPDATE dose 
    SET status = "printed" 
    WHERE id = SELECT GREATEST (status) FROM dose (status);"""
    # print(sql)
    try:
       # Execute the SQL command
       curr.execute(sql)
       # Commit your changes in the database
       conn.commit()
    except:
       # Rollback in case there is any error
       conn.rollback()
    curr.close()

cur.close()
conn.close()

My SQL Database

【问题讨论】:

你的问题不清楚。请在此处添加示例数据。 状态栏是数字还是字符串? 我建议你在你的 MySQL 终端中运行查询,看看它是否在那里工作。如果 status 是一个数字,那么 SET status =“printed” 似乎不太可能起作用。此外,您的 sql 语句周围似乎有太多引号。 SELECT GREATEST (status) FROM dose (status); 的输出你喜欢吗? (@DS_London too many quotes Python 三引号:允许字符串文字包含换行符。推荐用于doc strings,甚至单行。) 【参考方案1】:

您的代码中有很多错误。

    您不使用第一个 select 查询的结果,您唯一要做的就是遍历结果以执行 UPDATE 您的更新查询错误

你应该把它改成:

import pymysql
conn = pymysql.connect(host='localhost', unix_socket='', user='root', passwd='pw', db='database')
curr = conn.cursor()
sql = """UPDATE dose 
    SET status = 'printed' 
    WHERE id = (SELECT max(status) FROM dose) """
try:
   # Execute the SQL command
   curr.execute(sql)
   # Commit your changes in the database
   conn.commit()
except:
   # Rollback in case there is any error
   conn.rollback()
curr.close()

conn.close()

【讨论】:

以上是关于My SQL with Python:选择具有最高值的行并在那里更改值的主要内容,如果未能解决你的问题,请参考以下文章

如何编写 SQL 来选择具有每个组的最大值(值)的行?

Django with database on SQL Server

如何选择具有父子关系的记录对父级具有最高分数

在 SQL Server 中查找给定 12 个月内 6 个月的最高连续期间

选择每年利润最高的 SQL

根据另一列选择具有最高 ID 的行