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:选择具有最高值的行并在那里更改值的主要内容,如果未能解决你的问题,请参考以下文章
Django with database on SQL Server