問題1:我在Python中有一個SQLite3連接。我如何檢查它是否連接?我知道如果sqlite3.connect()失敗,會引發異常,但如果我或某些關閉了連接,我該如何檢查並在必要時重新打開它?如何檢查Python中是否連接了SQLite3數據庫?
問題2:我可以在連接打開時移動文件系統中的文件(不可刪除)。無論出於何種原因,數據庫都將變爲只讀。如果我把它移回去,它就好像什麼都沒發生一樣。有人可以解釋這一點嗎?我應該在訪問之前檢查isfile(dbpath)嗎?
問題1:我在Python中有一個SQLite3連接。我如何檢查它是否連接?我知道如果sqlite3.connect()失敗,會引發異常,但如果我或某些關閉了連接,我該如何檢查並在必要時重新打開它?如何檢查Python中是否連接了SQLite3數據庫?
問題2:我可以在連接打開時移動文件系統中的文件(不可刪除)。無論出於何種原因,數據庫都將變爲只讀。如果我把它移回去,它就好像什麼都沒發生一樣。有人可以解釋這一點嗎?我應該在訪問之前檢查isfile(dbpath)嗎?
1)使用psutils
檢查數據庫文件使用的過程:
import os
import psutil
import sqlite3
con = sqlite3.connect('temp.db')
def is_open(path):
for proc in psutil.process_iter():
try:
files = proc.get_open_files()
if files:
for _file in files:
if _file.path == path:
return True
except psutil.NoSuchProcess as err:
print(err)
return False
con = sqlite3.connect('temp.db')
path = os.path.abspath('temp.db')
print(is_open(path))
con.close()
print(is_open(path))
輸出:
True
False
2)閱讀,操作系統應該反正緩存的文件,這樣就可以閱讀,如果你嘗試寫下面的錯誤會被提出:
sqlite3.OperationalError: attempt to write a readonly database
正如你所說的檢查012運行sqlite3.connect
前所有腦幹:
if os.path.exists(db):
你不能強迫
sqlite3.connect
功能無法創建數據庫文件。
這更多的是一種簡單的變通的想法,我一直在使用:
例如
...
def OpenConn(self):
if(self.flagConnOpen == False):
self.db = sqlite3.connect(self.dbPath);
self.flagConnOpen = True;
然後你可以把這個OpenConn()放在任何需要連接的函數的開始處,它會根據需要打開一個。