專案目前需求是,當status=1時,不要更新odds的值,保持原本的數據
我目前的做法是,判斷status=1時會只使用更新的sql語法
但是odds發現都變成null,還是都變不見了
試了很多方法還是會不見
因為我是sql新手,還很多不太會
所以想請問各位 sql專家們,幫我檢查是哪裡出了問題 ,感謝各位~
更新status=1的sql語法
"update_":f"""
UPDATE matches SET
gtime = %(gtime)s,
result_info = %(result_info)s,
other_info = %(other_info)s,
receive_time = %(receive_time)s,
send_time = %(send_time)s,
WHERE
site = %(site)s AND
type = %(gtype)s AND
date = %(gdate)s AND
site_gid = %(site_gid)s;
"""
更新db的程式碼
SQL = setting["update_match"] if game_status !="1" else setting['update_final']
values = {
"site_gid": match['game_id'],
"gtype": match['game_type'],
"gdate": match['game_date'],
"game_status": match['game_status'],
"result_info": match['ResultInfo'],
"other_info": match['OtherInfo'],
"receive_time": match['receive_time'],
"send_time": datetime.now().strftime("%Y-%m-%d %H:%M"),
"odds": json.dumps(match['odds'])
}
if game_status=='1':
del values['odds']
# print(values)
cursor.execute(SQL,values)
有檢查過當status==1時,values確實沒有odds這欄位
mysql裡面的欄位配置
site_gid是唯一值,目前是可以順利更新,但是odds值都會被覆蓋掉
我是不知道你的where是怎麼判斷的~
但如果你update會跑到原來的資料(不該更新)
那麼可以這樣在更新的欄位加入 判斷 是要更新 0 還是帶回 原值 紀錄
例如
update 表格
set 欄位 = (case when status=1 then 欄位 else 0 end)
where 條件
先不要判斷status=1,直接UPDATE一個沒有odds的SQL Statement
如果有問題,請檢視MySQL的設定
沒問題後,再加入status=1的if條件判斷,但不要用del values['odds']方式,直接使用沒有odds的SQL Statement
如果有問題,代表del values['odds']和你放values的區塊有問題,再調整
沒問題就看是否直接沿用這樣的模式,不要用del values['odds']的方式