suneet
suneet

Reputation: 400

create database automatically in django using settings.py or models.py

Current flow:

1) mysql >> CREATE {DATABASE} db_name  [create_specification] ;
2) change database info in settings.py
3) python manage.py syncdb (assuming we have ready-made models)

Isn't there a way to do the same without using step 1. Maybe putting database name and specifications somewhere in settings.py so that i don't have to manually configure the db everytime i shift this project to some server

EDIT - WHY I want to dodge the first step:

In my case, different columns of different tables have different collation types. So while development, whenever I recreate the database, i need to manually change the configurations of individual columns/tables, which is frustrating.

Upvotes: 6

Views: 24748

Answers (5)

dani herrera
dani herrera

Reputation: 51645

All you need is to know database user / password with grant create database, all other data is in settings. You can connect a custom command to pre_syncdb signal to gather this data.

Take a look to createsuperuser that is raised on post_syndb signal to learn about this.

EDITED

syncdb is not longer available. Since 1.9 you should to use pre_migrate signal.

Upvotes: 4

alanjds
alanjds

Reputation: 4130

Done via django_extensions:

1) ./manage.py sqlcreate | ./manage.py dbshell
2) ./manage.py migrate

If at least the user on settings.py is already able to connect on the DB and have creation permissions, this should work.

To have it, I suggest to provide an envvar DATABASE_URL and use dj_database_url

At least is working for me on Postgres.

Upvotes: 2

KhoPhi
KhoPhi

Reputation: 9517

I don't think its possible to dodge the step one, at least if you're using a different database backend except SQLite in django.

A note from docs: https://docs.djangoproject.com/en/dev/intro/tutorial01/#database-setup

If you’re using PostgreSQL or MySQL, make sure you’ve created a database by this point. Do that with “CREATE DATABASE database_name;” within your database’s interactive prompt.

If you’re using SQLite, you don’t need to create anything beforehand - the database file will be created automatically when it is needed.

If you move your project to a server like Heroku, the db creation is automated, like when using PostgreSQL.

I'm wondering why you want to dogde the first step, however if you're desperate, you might still want to trying going the direct python way via psycopg2

Creating a postgresql DB using psycopg2

Upvotes: 3

Phillip
Phillip

Reputation: 13668

Granting the overall application database creation permissions to spare a minor manual initialization at deployment time sounds like a bad idea.

You should rather create a separate script that automates deployment for you. Fabric seems to have become the standard tool for that.

Upvotes: 1

ddl
ddl

Reputation: 329

You can use sqlite while you are still in development stage.

Upvotes: -2

Related Questions