亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如果它檢測到一個單元已經存在,我需要一個 SQL 表來更新一個單元 # 而不是創建一個新條目

如果它檢測到一個單元已經存在,我需要一個 SQL 表來更新一個單元 # 而不是創建一個新條目

藍山帝景 2023-05-23 15:58:42
我正在嘗試建立一個數據庫來管理居住在封閉式社區中的居民。目標是創建一個功能,使物業經理可以輕松填寫表格,然后將信息提交到數據庫中。如果 unit# 不存在,我需要 SQL 創建一個新條目,但如果該單元確實存在,那么我需要它用新數據覆蓋該 unit# 的條目。這是我目前的代碼。所以基本上我要說的是,我需要它來檢查 :unit 值是否已經存在以及它是否覆蓋了已經存在的數據,而不是僅僅盲目地將數據輸入到適當的列中。def submit():    #logging    logger.info("Resident info added for")    logger.info(unit.get())    print(logger.level)    #Databases    conn = sqlite3.connect('rdata.db')    c = conn.cursor()    c.execute("INSERT INTO rdata VALUES (:name, :unit, :phone1, :phone2, :snote, :snote2, :guest1, :guest2, :guest3, :guest4, :guest5, :guest6, :guest7, :guest8, :guest9, :guest10, :guest11, :guest12, :guest13, :guest14, :guest15)",        {            'name': name.get(),            'unit': unit.get(),            'phone1': phone1.get(),            'phone2': phone2.get(),            'snote': snote.get(),            'snote2':snote2.get(),            'guest1': guest1.get(),            'guest2': guest2.get(),            'guest3': guest3.get(),            'guest4': guest4.get(),            'guest5': guest5.get(),            'guest6': guest6.get(),            'guest7': guest7.get(),            'guest8': guest8.get(),            'guest9': guest9.get(),            'guest10': guest10.get(),            'guest11': guest11.get(),            'guest12': guest12.get(),            'guest13': guest13.get(),            'guest14': guest14.get(),            'guest15': guest15.get(),        })    conn.commit()    conn.close()    name.delete(0, END)    unit.delete(0, END)    phone1.delete(0, END)    phone2.delete(0, END)    snote.delete(0, END)    snote2.delete(0, END)    guest1.delete(0, END)    guest2.delete(0, END)    guest3.delete(0, END)    guest4.delete(0, END)    guest5.delete(0, END)    guest6.delete(0, END)    guest7.delete(0, END)    guest8.delete(0, END)    guest9.delete(0, END)    guest10.delete(0, END)    guest11.delete(0, END)    guest12.delete(0, END)    guest13.delete(0, END)    guest14.delete(0, END)    guest15.delete(0, END)
查看完整描述

1 回答

?
慕容森

TA貢獻1853條經驗 獲得超18個贊

您正在描述一個upsert查詢。在 SQLite 中,這是通過on conflict.

為此,您需要對列進行唯一約束unit- 或者將該列用作主鍵。

然后,您可以按如下方式對查詢進行措辭。我減少了可讀性的列數......并且因為我懷疑你的設計 - 這 15guest列可能應該是另一個表中的行。

INSERT INTO rdata (name, unit, phone, snote, guest)
VALUES (:name, :unit, :phone, :snote, :guest)ON CONFLICT(unit)
UPDATE SET
    name  = excluded.name,
    phone = excluded.phone,
    snote = excluded.snote,
    guest = excluded.guest

如果存在具有相同 的行unit,則查詢會使用新值更新現有行。

請注意,我在 中枚舉了目標列insert:出于多種原因(例如可維護性),這是 SQL 中的一個很好的做法。


查看完整回答
反對 回復 2023-05-23
  • 1 回答
  • 0 關注
  • 112 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號