2017-10-12 117 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