pythondjangoin-memory-databasedjango-syncdb

In django, how do I call the subcommand 'syncdb' from the initialization script?


I'm new to python and django, and when following the Django Book I learned about the command 'python manage.py syncdb' which generated database tables for me. In development environment I use sqlite in memory database, so it is automatically erased everytime I restart the server. So how do I script this 'syncdb' command?(Should that be done inside the 'settings.py' file?)

CLARIFICATION

The OP is using an in-memory database, which needs to be initialized at the start of any process working with Django models defined against that database. What is the best way to ensure that the database is initialized (once per process start). This would be for running tests, or running a server, either via manage.py runserver or via a webserver process (such as with WSGI or mod_python).


Solution

  • All Django management commands can be accessed programmatically:

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

    Ideally you'd use a pre-init signal on runserver to activate this, but such a signal doesn't exist. So, actually, the way I'd handle this if I were you would be to create a custom management command, like runserver_newdb, and execute this inside it:

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

    See the documentation for more information on writing custom management commands.