Thi*_*uda 46 python django django-syncdb in-memory-database
我是python和django的新手,在关注Django Book时,我了解了命令'python manage.py syncdb',它为我生成了数据库表.在开发环境中,我在内存数据库中使用sqlite,因此每次重新启动服务器时都会自动删除它.那么我如何编写这个'syncdb'命令的脚本?(这应该在'settings.py'文件中完成吗?)
澄清
OP正在使用内存数据库,需要在使用针对该数据库定义的Django模型的任何进程开始时对其进行初始化.确保数据库初始化的最佳方法是什么(每个进程启动一次).这可以通过manage.py runserver或通过Web服务器进程(例如使用WSGI或mod_python)运行测试或运行服务器.
Dan*_*aab 79
可以通过编程方式访问所有Django管理命令:
from django.core.management import call_command
call_command('syncdb', interactive=True)
Run Code Online (Sandbox Code Playgroud)
理想情况下,您可以使用pre-init信号runserver来激活它,但这样的信号不存在.所以,实际上,如果我是你,我将处理这个问题的方法是创建一个自定义管理命令runserver_newdb,并在其中执行:
from django.core.management import call_command
call_command('syncdb', interactive=True)
call_command('runserver')
Run Code Online (Sandbox Code Playgroud)
有关编写自定义管理命令的更多信息,请参阅文档.
Sam*_*lan 10
正如" Django启动代码放在何处? "所示,您可以将中间件用于启动代码.Django文档就在这里.
例如(未经测试):
startup.py:
from django.core.exceptions import MiddlewareNotUsed
from django.conf import settings
from django.core.management import call_command
class StartupMiddleware(object):
def __init__(self):
# The following db settings name is django 1.2. django < 1.2 will use settings.DATABASE_NAME
if settings.DATABASES['default']['NAME'] == ':memory:':
call_command('syncdb', interactive=False)
raise MiddlewareNotUsed('Startup complete')
Run Code Online (Sandbox Code Playgroud)
并在您的settings.py中:
MIDDLEWARE_CLASSES = (
'your_project.middleware.startup.StartupMiddleware',
# Existing middleware classes here
)
Run Code Online (Sandbox Code Playgroud)
更新
我run.sh在项目的根目录中添加了一个调用的脚本.这对我来说是一个SQLite数据库:
#!/usr/bin/python
from django.core.management import call_command
call_command('syncdb')
call_command('runserver')
Run Code Online (Sandbox Code Playgroud)
原始答案
我不确定我是通过"编写syncdb命令脚本"来理解你的意思.您通常python manage.py syncdb从命令行执行.这通常在添加新模型后完成.如果您希望使用简单的shell脚本轻松完成此操作.我没有看到任何理由syncdb从内部放置(或调用)settings.py.
你能在问题中添加更多细节吗?添加上下文并解释您到底想要完成的内容?
| 归档时间: |
|
| 查看次数: |
17156 次 |
| 最近记录: |