Search code examples
pythonmysqlsqldatabasesql-update

update the last entered value from a selection of values in a database with python , mysql


Okay so i have a table which has student id and the student id is used as identifier to edit the column but what if the same student lends a book twice then all the student value will b edited which i don't want....i want the last entered data of student id to b edited and using a Sl.No is not a solution here because its practically complicated.I am using python connector. Please help :) Thanks in advance

code i use right now :

con = mysql.connect(host='localhosT', user='root',
                    password='*****', database='DB')
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')

Solution

  • If I followed you correctly, you want to update just one record that matches the where condition. For this to be done in a reliable manner, you need a column to define the ordering of the records. It could be a date, an incrementing id, or else. I assume that such column exists in your table and is called ordering_column.

    A simple option is to use ORDER BY and LIMIT in the UPDATE statement, like so:

    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(), )
    

    Note that I modified your code so input values are given as parameters rather than concatenated into the query string. This is an important change, that makes your code safer and more efficient.