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).
All Django management commands can be accessed programmatically:
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, likerunserver_newdb
, and execute this inside it:See the documentation for more information on writing custom management commands.
As suggested by "Where to put Django startup code?", you can use middleware for your startup code. The Django docs are here.
For example (untested):
startup.py:
and in your settings.py:
Update
I added a script called
run.sh
in the project's root directory. This worked for me with an SQLite database:Original Answer
I am not sure I understand what you mean by "scripting the syncdb command". You usually execute
python manage.py syncdb
from the command line. This is usually done after adding new models. In case you want to you easily accomplish this using a simple shell script. I don't see any reason to place (or invoke)syncdb
from withinsettings.py
.Could you add more details to your question? Add context and explain what exactly are you trying to get done?
You could create a new script that you call instead of manage.py that calls manage.py:
If you don't need to add an admin you could change the second line like this:
I'm assuming that what you're trying to do is create your db and then start your server with one command every time.