是否可以从python脚本进行迁移?
我试图在没有shell的Heliohost上使用django,但我可以使用python脚本.
something like
from django import shell
shell.main(['mysite/manage.py', 'migrate'])
Run Code Online (Sandbox Code Playgroud)
编辑
使用@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")
Run Code Online (Sandbox Code Playgroud)
然后访问了映射到migrate的url,返回"Final Migration Successful"
然后我尝试了数据库
from .models import Question
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
Run Code Online (Sandbox Code Playgroud)
给我错误:
(1146, "Table 'usr_mydb.polls_question' doesn't exist")
Run Code Online (Sandbox Code Playgroud)
来自Django教程:
绕过manage.py
如果你不想使用manage.py,没问题.只需将DJANGO_SETTINGS_MODULE环境变量设置为mysite.settings,启动一个普通的Python shell,然后设置Django:
>>> import django
>>> django.setup()
Run Code Online (Sandbox Code Playgroud)
如果这引发了AttributeError,那么您可能正在使用与本教程版本不匹配的Django版本.您将要切换到较旧的教程或较新的Django版本.
您必须从manage.py所在的同一目录运行python,或者确保该目录位于Python路径上,以便import mysite有效.
有关所有这些的更多信息,请参阅django-admin文档.
但是如何python manage.py <command>使用django.setup()它在文档中是无处可去的.
您可以使用call_command来运行django manage命令.
以下是使用它来调用migrate的示例;
from django.core.management import call_command
call_command("migrate", interactive=False)
Run Code Online (Sandbox Code Playgroud)
我有,interactive=False因为它在连续集成服务器上运行 - 但根据您的使用情况,您可能希望省略它.