解決django的sqlite3的database is locked
阿新 • • 發佈:2019-01-23
今天在用admin後臺新增一篇部落格,最後居然報錯:DatabaseError at ... database is locked, 因為我的資料庫使用的是sqlite3,所以不支援大量的訪問是有可能的,但是目前僅僅我一個人訪問的話,居然報錯,我就納悶了,用google搜尋了DatabaseError at database is locked 和django database is locked,找到的資訊就是說,sqlite3不適合於多執行緒訪問,就是不適合threding訪問。我那些程式原來好好的,就是今天新增部落格文章突然不行了,於是接著搜尋答案。最後找到這麼一篇:
因為內容很短,而且可能有些人訪問不了,乾脆全部貼在下面算了:
今天玩django,用了django推薦的SQLite,我勒個去,居然在寫入資料庫時,出現了“Database is locked”的錯誤。無奈啊,放狗搜了,這裡,這裡和這裡,不過嘗試了都解決不了。
結果悲劇的發現,是SQLite的資料庫檔案的許可權不行。。。改成666就OK了。。。
148 views
作者的這幾句話,提醒了我,我馬上登入伺服器檢視許可權,原來我的sqlite3資料庫也是隻有-rw-r--r--許可權,改為666後,就沒有資料庫被鎖定的錯誤了。原來出錯了還要重新整理好幾下或者等待幾分鐘才能訪問,現在不用了。
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'. 'NAME': os.path.join(YOUR_DIR,'data.db'), # Or path to database file if using sqlite3. 'USER': '', # Not used with sqlite3. 'PASSWORD': '', # Not used with sqlite3. 'HOST': '', # Set to empty string for localhost. Not used with sqlite3. 'PORT': '', # Set to empty string for default. Not used with sqlite3. 'OPTIONS': { 'timeout': 20, } } }
就是在DATABASES中的欄位新增:
'OPTIONS': { 'timeout': 20, }