2017-10-12 43 views
3

是否可以從python腳本進行遷移?如何使用python腳本進行數據庫遷移?

我想在沒有shell的Heliohost上使用django,但我可以使用python腳本。

something like 

from django import shell 
shell.main(['mysite/manage.py', 'migrate']) 

編輯

從@Shadow使用輸入,我試圖把這個代碼在views.py文件

def migrate(request): 
    django.setup() 
    from django.core.management import call_command 
    call_command("migrate", interactive=False) 
    return HttpResponse("Final Migration Successful") 

隨後走訪映射到遷移網址這回「最終遷移成功「

然後我試着數據庫像

from .models import Question 


class Question(models.Model): 
    question_text = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

給我的錯誤:

(1146, "Table 'usr_mydb.polls_question' doesn't exist") 

從Django的教程:

繞過manage.py

如果你不想使用manage.py,沒問題。只需設置DJANGO_SETTINGS_MODULE環境變量mysite.settings,啓動一個普通的Python外殼,併成立了Django的:

>>> import django 
>>> django.setup() 

如果這引發了一個AttributeError,你可能會使用一個版本的Django的不匹配這個教程版本。您將要切換到較舊的教程或較新的Django版本。

您必須從同一目錄中運行python manage.py,或確保該目錄位於Python路徑中,以便導入mysite可以工作。

有關所有這些的更多信息,請參閱django-admin文檔。

但如何做python manage.py <command>使用django.setup()是在文檔中沒有地方。

回答

4

您可以使用call_command來運行django管理命令。

這是一個使用它來調用遷移的例子;

from django.core.management import call_command 
call_command("migrate", interactive=False) 

interactive=False因爲這個運行的持續集成服務器上 - 而是根據您的使用您不妨忽略它。

+0

感謝。如何在這裏指定我的項目。這個文件駐留在哪裏? – Rahul

+0

對不起 - 你是什麼意思?你可以創建一個包含這個腳本的腳本並從你的Heliohost運行它。 – Shadow

+0

讓我試着回去。 – Rahul

1

基本上你需要:

  • 導入設置
  • 配置djnago您的設置
  • 設置的Django
  • 調用命令

如果你有一個Python外殼它是在你的項目的Python路徑,一旦你在外殼,你可以執行以下命令:

>>> from myprojectpath import settings as myapp_defaults 
>>> import django 
>>> from django.conf import settings 
>>> from django.core.management import call_command 
>>> if not settings.configured: 
     settings.configure(myapp_defaults) 
>>> django.setup() 
>>> call_command("migrate", interactive=False) 

希望它有助於

+0

我說我沒有Python控制檯。但我認爲我可以將其轉換爲腳本並嘗試運行。 – Rahul

相關問題