在django中,如何在初始化脚本中调用子命令'syncdb'?

9 浏览
0 Comments

在django中,如何在初始化脚本中调用子命令'syncdb'?

我对Python和Django还不熟悉,在阅读Django Book时,我了解到了一个命令'python manage.py syncdb',它为我生成了数据库表。在开发环境中,我使用的是内存数据库sqlite,所以每次重新启动服务器时它会自动清空。那么,我该如何脚本化这个'syncdb'命令呢?(应该在'settings.py'文件中完成吗?)

CLARIFICATION

OP正在使用内存数据库,在使用针对该数据库定义的Django模型的任何进程开始时都需要初始化它。如何确保数据库在每次进程启动时都进行初始化是最好的方式?这适用于运行测试,或者通过manage.py runserver或通过Web服务器进程(如WSGI或mod_python)运行服务器。

0
0 Comments

问题的出现原因是用户想要在Django的初始化脚本中调用子命令'syncdb',以便在每次启动应用程序时自动创建数据库。用户试图将调用放在settings.py文件中,但是没有找到合适的方法。

解决方法是用户通过在项目的根目录中添加一个名为run.sh的脚本来调用'syncdb'命令。脚本的内容如下:

#!/usr/bin/python
from django.core.management import call_command
call_command('syncdb')
call_command('runserver')

这样,用户可以在命令行中运行脚本,从而调用'syncdb'命令。

原始答案中,有人建议将调用放在settings.py中,但是并没有找到更好的解决方法。

最后,用户发现了通过API调用'syncdb'的机制,并更新了答案。但是关于在哪里放置调用的问题仍然没有更好的建议。

总结起来,用户想要在Django的初始化脚本中调用'syncdb'命令,以便在每次启动应用程序时自动创建数据库。他们试图将调用放在settings.py文件中,但是没有找到合适的方法。最终,他们通过在项目的根目录中添加一个脚本来解决了这个问题。

0
0 Comments

问题:在Django中,如何从初始化脚本调用子命令'syncdb'?

原因:根据stackoverflow上的建议,可以使用中间件来实现启动代码。Django文档链接如下。startup.py脚本中定义了一个名为StartupMiddleware的中间件类,该类在初始化时会调用'syncdb'子命令来同步数据库。

解决方法:在settings.py中的MIDDLEWARE_CLASSES列表中添加'your_project.middleware.startup.StartupMiddleware',这样就可以在Django启动时调用'syncdb'子命令。

0
0 Comments

在django中,通过初始化脚本调用子命令'syncdb'的原因是因为在运行服务器之前,希望自动执行数据库同步操作。然而,由于django没有提供预初始化信号来实现这一功能,所以需要使用其他方式来解决。

解决方法是创建一个自定义的管理命令,例如'runserver_newdb',然后在其中执行以下代码:

from django.core.management import call_command
call_command('syncdb', interactive=True)
call_command('runserver')

这段代码中,首先调用`call_command`函数执行'syncdb'命令,通过设置`interactive=True`来保持交互式执行。然后继续调用`call_command`函数执行'runserver'命令,以启动服务器。

在一个典型的django项目中,可以将以下代码放置在`settings.py`文件中的某个位置,或者在从`settings.py`中导入的脚本中:

from django.core.management import call_command
call_command('syncdb', interactive=True)

通过以上方法,可以在初始化脚本中调用'syncdb'子命令来实现自动执行数据库同步操作。要了解更多关于编写自定义管理命令的信息,请参考django的官方文档。

0