Django

編寫獨立的Python程式存取Django資料庫

當我們使用Django建立了一個網站的框架後,一般而言,要存取此網站的資料庫基本上是要在Django框架的啟用狀態時進行存取,也就是你的網站需要是在執行中的狀態,我們以瀏覽器向伺服器存取在網站資料夾下的Python程式時,該程式才能夠以Django的ORM方式正確地存取它的附屬資料表。但有時候我們在進行網站資料維護時,尤其是一些比較耗時的資料處理程式時,其實是需要編寫另外獨立的程式讓管理者在伺服器上(或開發環境中)執行的,本文簡單地記錄了獨立程式存取Django資料庫的方法。

在開始之前要留意的是,Django框架在程式內是以ORM的方式而不是SQL程式存取資料表,它的資料表是在models.py中以class類別的方式所定義的,實際資料表的格式以及資料型態,是透過python manage.py makemigrations以及python manage.py migrate指令進行遷移轉換的,所以,如果你想要以獨立的程式利用SQL指令去直接存取Django網站的資料,是非常高風險的行為。因此,正確的方法是,在你的程式中導入Django資料庫的設定環境,仍然以ORM的方式存取它的資料表。

所以,重點是,只要在你的獨立Python程式(直接在Shell命令提示字元環境中執行,而非透過網頁伺服器委派)中準備好和你的Django網站一樣的環境,就可以順利地操作資料庫了。那麼,如何準備這樣的環境呢?

如果你只是要執行簡單的操作,沒有幾行指令的話,在命令列中輸入以下的指令,是最便利的方法:

python manage.py shell

沒錯,就是在Django網站的目錄下執行上面這個簡單的指令,它就會幫我們匯入Django網站的環境,讓我們直接使用,畫面如下:

假設models.py是放在mysite的資料夾之下,而且裡面有一個叫做Author的資料表

在上述的交談式介面中,可以使用所有在Django程式中的ORM指令,當然還包括了新增、編輯、及刪除功能。

那麼,如果需要編寫更複雜的程式呢?沒問題,只要在程式的前面加上原本你的網站中在wsgi.py中的設定引入指令,再加上django.setup()就可以了,範例程式如下:

import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tangwww.settings')
django.setup()

from mysite.models import Author

authors = Author.objects.all()
print(authors[:10])

在上面例子的第3行中,假設我們的settings.py是放在tangwww資料夾之下的話,那麼就可以利用透過這行引入所有網站中的設定資料,再利用第4行的django.setup()完成設定作業。接下來,就如你所看到的,在程式中也就可以輕易地利用ORM的方式,存取Author這張資料表了。執行的過程如下(假設上述的程式儲存為fixauthor.py):

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s