python - 如何使用python脚本进行数据库迁移?

标签 python django

是否可以从 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/

相关文章:

python - 错误 : [Errno 32] Broken pipe

python - 如何修复 "ImportError: No module named ..."错误

c++ - Python SIP 暴露函数

python - 基于多个条件对多维数组进行排序的算法

python - cv2.getOptimalNewCameraMatrix 在某些数据集上返回 [0,0,0,0] 的 ROI

python - Python中的Excel解析并形成字典

django - Digital Ocean上的Docker中的Django-Anymail的“Mailgun Magnificent API”错误

python - 从 Django Haystack 中的外键搜索

python - 在树莓派2上的临时文件中读取图像

Django Nginx 和 Gunicorn .sock 失败 (2 : No such file or directory) while connecting to upstream