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

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

我的 SQL python 數據和數據庫瀏覽器之間的差異

我的 SQL python 數據和數據庫瀏覽器之間的差異

aluckdog 2021-08-17 10:57:41
我將 sqlite 與 tkinter 結合使用在我的 Python 程序中寫入和刪除記錄。刪除在我的程序中工作得很好,而且當我重新啟動程序時,該記錄不再存在。但是,我總是使用 Linux 標準軟件 DB Browser for SQLite 進行交叉檢查,并查看我的 SQL 表。奇怪的是,所有記錄仍然存在于數據庫瀏覽器中?,F在我想知道,這是為什么?為什么它在我的 Python sqlite 查詢中消失了,而在數據庫瀏覽器中沒有?不知何故,這些記錄仍然存在。我怎樣才能徹底銷毀我的記錄?對于刪除,我使用:(用戶可以使用列表框選擇特定條目。最終,我將所選項目“翻譯”為其特定 ID 并觸發刪除。)self.c.execute("DELETE FROM financial_table WHERE ID=?",(entry,))self.conn.commit()對于我的查詢,我使用:(我查詢特定年份和月份的數據。)self.c.execute("SELECT ID, Date, Item, Price FROM financial_table WHERE strftime('%Y-%m', Date) = '{}' ORDER BY Date ".format(date))single_dates = self.c.fetchall()非常感謝您的幫助。
查看完整描述

2 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

我的問題的答案是:我很笨!昨天晚上我很累,在一個與我的 python 程序同名的子文件夾中查看了錯誤的 sql 文件。所以它實際上是有效的。請原諒我的愚蠢。



查看完整回答
反對 回復 2021-08-17
?
慕雪6442864

TA貢獻1812條經驗 獲得超5個贊

您可能在控制數據庫上的事務時遇到問題,但也可能是連接本身。確保在不同的連接上沒有任何未提交的 DML 語句(即INSERT,UPDATE或DELETE在未提交的數據庫瀏覽器中),這可能會導致conn.commit()失敗。使用 SQLite,未提交的事務可以鎖定整個數據庫 - 一小段時間。


嘗試確保刪除語句有一個新游標并conn.close()在conn.commit(). 在執行代碼之前,請確保沒有其他連接正在訪問數據庫 - 包括 DB 瀏覽器。僅在您關閉應用程序后(對于此測試)才簽入 DB 瀏覽器。這消除了多線程或鎖定作為可能的原因。另請參閱SQLite - 數據持久性和SQLite - 控制事務


使用try...except塊捕獲 DML 語句的所有錯誤也很有幫助。像這樣的東西:


import sqlite3


try:

    self.conn = sqlite3.connect('mydb.db')

    self.c = conn.cursor()    

    self.c.execute("DELETE FROM financial_table WHERE ID=?",(entry,))

    self.conn.commit()

except sqlite3.Error as e:

    print("An error occurred:", e.args[0])

finally:

    self.conn.close()


查看完整回答
反對 回復 2021-08-17
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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