iT邦幫忙

0

【python】SQL使用update後,原本值被覆蓋掉的問題~

2024-05-27 10:49:09464 瀏覽
  • 分享至 

  • xImage

專案目前需求是,當status=1時,不要更新odds的值,保持原本的數據

我目前的做法是,判斷status=1時會只使用更新的sql語法

但是odds發現都變成null,還是都變不見了

試了很多方法還是會不見

因為我是sql新手,還很多不太會/images/emoticon/emoticon02.gif

所以想請問各位 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裡面的欄位配置
https://ithelp.ithome.com.tw/upload/images/20240527/20132078NVft6zReNk.jpg

site_gid是唯一值,目前是可以順利更新,但是odds值都會被覆蓋掉

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
純真的人
iT邦大師 1 級 ‧ 2024-05-27 10:56:27

我是不知道你的where是怎麼判斷的~

但如果你update會跑到原來的資料(不該更新)

那麼可以這樣在更新的欄位加入 判斷 是要更新 0 還是帶回 原值 紀錄

例如

update 表格
set 欄位 = (case when status=1 then 欄位 else 0 end)
where 條件
iT邦新手 5 級 ‧ 2024-05-27 14:23:44 檢舉

where條件式
我就用上面的WHERE
site = %(site)s AND
type = %(gtype)s AND
date = %(gdate)s AND
site_gid = %(site_gid)s;
來判斷是同一筆 在更新
感謝大大,我來試試看

0
厚厚
iT邦新手 1 級 ‧ 2024-05-27 11:31:32

先不要判斷status=1,直接UPDATE一個沒有odds的SQL Statement

如果有問題,請檢視MySQL的設定

沒問題後,再加入status=1的if條件判斷,但不要用del values['odds']方式,直接使用沒有odds的SQL Statement

如果有問題,代表del values['odds']和你放values的區塊有問題,再調整

沒問題就看是否直接沿用這樣的模式,不要用del values['odds']的方式

iT邦新手 5 級 ‧ 2024-05-27 14:24:17 檢舉

好的 感謝大大
我在一步一步來排錯看看

我要發表回答

立即登入回答