我有一個項目(#1)與其中的幾個應用程序在它使用MySQL數據庫#1。我還有另一個項目(#2),它的django代碼在同一臺服務器上,但它使用了不同的mysql數據庫(#2)。在django中,如何從主項目中查詢單獨的項目?
我的目標是運行在項目#1中的Web應用程序,並使用Django模型從項目#2對DB#2的簡單查詢。然而,當我從項目#2導入時,它仍然使用#1數據庫,即使#2的settings.py文件適當地使用了數據庫#2(即當我在項目#2中運行web應用程序時,它工作正常)。
這裏是我可以成功運行作爲一個獨立的腳本文件的全部。可悲的是,當我將文件導入項目#1和運行功能,它失敗(因爲它正在尋找在DB#1表):
import sys
def get_stuff_from_project2(ids):
from django.core.management import setup_environ
from project2 import settings
setup_environ(settings)
from project2.myapp2.models import mymodel2
all_rows = mymodel2.objects.filter(id__in=ids).values()
return(all_rows)
# as a standalone script, run the main function
if __name__ == "__main__":
sys.path.append("/home/me/django")
print str (get_stuff_from_project2(sys.argv[1:]))
再次,這可以作爲一個獨立的腳本。但是,從項目#1(使用下面的代碼)失敗了DatabaseError,表「db1.myapp2_mymodel2」不存在:
from project1.myapp1.standalone_script import get_stuff_from_project2
all_rows = get_stuff_from_project2(ids)
在這裏,我的猜測是,setup_environ功能實際上並不處理新DATABASE_NAME ,或者在設置設置後它不能更改現有的DATABASE_NAME?
我在這一點上有點失落,並一直在試圖尋找一個解決方案。我並不想真正採用「多站點」或「多數據庫」的方法,因爲我真的希望將項目1和項目2儘可能分開。我的選擇是將獨立腳本作爲系統調用從項目1中調用,或者在項目2中創建一個視圖,該視圖是API併發送數據。但是,我認爲只要使用模型將是最簡單的。
謝謝。
-------添加4月13日11:35 PST ----
這裏的問題的一個簡單的版本:我如何可以訪問兩個不同的項目從單一的獨立腳本。下面的代碼工作確定爲哪個項目我setup_environ在第一,但它不能做第二個:
import sys
from django.core.management import setup_environ
sys.path.append('/home/me/django')
from project1 import settings
print setup_environ(settings) # shows /home/me/django/project1
print settings.DATABASE_NAME # shows db1
from project1.myapp1.models import mymodel1
mymodel1.objects.filter(id=9376544).values() # works fine
from project2 import settings
print setup_environ(settings) # shows /home/me/django/project2
print settings.DATABASE_NAME # shows db2
from project2.myapp2.models import mymodel2
mymodel2.objects.filter(id=6544).values() # fails with:
# django.db.utils.DatabaseError: (1146, "Table 'db1.myapp2_mymodel2' doesn't exist")
但是,這兩個項目#1和#項目2已經在同一個Python路徑中(我編輯我上面的代碼和移動sys.path.append聲明下來的主要條件,而不是使之更加清楚)。我的目錄結構如下所示:/ home/me/django/project1和/ home/me/django/project2和/ home/me/django已經在我的Python路徑中。 – brfox 2011-04-13 05:33:17