[紀錄]Fix PyMysql Update Fail

Fix PyMysql Update Fail


某天在調整我的爬蟲時發現到 下的Update Query都沒有成立
檢查欄位的updated_at 也沒有更新到於是開始反查原因

  1. 先print出PyMysql的Row Sql來看
    connection = pymysql.connect(
    host=db_host,
    database=db_name,
    user=db_user_name,
    password=db_password
    )
    cursor = connection.cursor()   
    update_sql = """
    UPDATE product
    SET name= %s
    """
    data = (prod_name)
    cursor.execute(update_sql, clothes_data)
    print(cursor._last_executed)
    
    cursor is the object used to interact with the database
    cursor._last_executed 為這個物件最後executed的query

OK 我檢查 Query 是正確的 但還是沒有更新到

  1. connection.commit

後來就繼續Goole 到了這篇

PyMysql UPDATE query

當Mysql 提交了 Upadte後 會先開啟DB Transaction
然後會因為default operates而有不同的動作
我原本預設是None auto commit mode 所以 如果提交Update沒有 commit出去
這筆Transaction不會結束,異動的資料就還是Lock狀態,那其他人就要等到Transaction Timeout後才能存取這些資料

後來修改成

connection = pymysql.connect(
host=db_host,
database=db_name,
user=db_user_name,
password=db_password
)
cursor = connection.cursor()   
update_sql = """
UPDATE product
SET name= %s
"""
data = (prod_name)
cursor.execute(update_sql, clothes_data)
connection.commit()

完成收工


參考自:

How to print the query being sent to mySQL using ‘pymysql’?

PyMysql UPDATE query