是否可以从 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")
然后访问映射到 migrate 的 url,返回“最终迁移成功”
然后我试了一下数据库
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 shell,然后设置 Django:
>>> import django
>>> django.setup()
如果这引发了 AttributeError,您可能正在使用与本教程版本不匹配的 Django 版本。您需要切换到较旧的教程或较新的 Django 版本。
您必须从 manage.py 所在的同一目录运行 python,或者确保该目录位于 Python 路径上,这样 import mysite 才能正常工作。
有关所有这些的更多信息,请参阅 django-admin 文档。
但是怎么办python manage.py <command>
使用 django.setup()
文档中没有任何地方。
最佳答案
您可以使用 call_command运行 django 管理命令。
这里是调用migrate的例子;
from django.core.management import call_command
call_command("migrate", interactive=False)
我有 interactive=False
因为它在持续集成服务器上运行 - 但根据您的使用情况,您可能希望忽略它。
关于python - 如何使用python脚本进行数据库迁移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701614/