python - 使用 python 和 mysql 从数据库中的一组值中更新最后输入的值
问题描述
好的,所以我有一个包含学生 ID 的表,并且学生 ID 用作编辑列的标识符,但是如果同一个学生两次借出一本书,那么所有学生的价值都将被编辑,这是我不想要的......我想编辑最后输入的学生 ID 数据并使用 Sl.No 在这里不是解决方案,因为它实际上很复杂。我正在使用 python 连接器。请帮助:)提前谢谢
我现在使用的代码:
con = mysql.connect(host='localhost', user='root',
password='monkey123', database='BOOK')
c = con.cursor()
c.execute(
f"UPDATE library set `status`='Returned',`date returned`='{str(cal.selection_get())}' WHERE `STUDENT ID`='{e_sch.get()}';")
c.execute('commit')
con.close()
messagebox.showinfo(
'Success', 'Book has been returned successfully')
解决方案
如果我正确地关注了您,您只想更新一条符合where
条件的记录。为了以可靠的方式完成此操作,您需要一列来定义记录的顺序。它可以是日期、递增的 id 或其他。我假设这样的列存在于您的表中并称为ordering_column
.
一个简单的选项是在语句中使用ORDER BY
和,如下所示:LIMIT
UPDATE
sql = """
UPDATE library
SET status = 'Returned', date returned = %s
WHERE student_id = %s
ORDER BY ordering_column DESC
LIMIT 1
"""
c = con.cursor()
c.execute(sql, (str(cal.selection_get()), e_sch.get(), )
请注意,我修改了您的代码,因此输入值作为参数给出,而不是连接到查询字符串中。这是一个重要的变化,它使您的代码更安全、更高效。
推荐阅读
- java - 如何分别在两个for循环中使用postDelayed或sleep两次
- emacs - emacs org-mode 中的间接缓冲区在右侧,而不是在下方
- prolog - 翻译为 DCG Semicontext 不起作用 - 继续
- sql - SQL查询计算每条记录中前一条记录的总和
- python - 制作一个新的字典值列表,其键与单独列表中的项目匹配
- python - django上的两因素身份验证
- python - 如何使用 loc 方法在数据框中设置列?
- vue.js - 如何在 Vue cli 3 中使用交叉点观察者 polyfill?
- c# - 与 ASP.net 核心应用程序一起发布 web 作业 3.xx
- python - 在python中为数据框中的缺失值创建指标