Skip to content

Instantly share code, notes, and snippets.

@vstoykov
Created September 29, 2011 15:13
Show Gist options
  • Save vstoykov/1250934 to your computer and use it in GitHub Desktop.
Save vstoykov/1250934 to your computer and use it in GitHub Desktop.
Django management command for dumping database
from django.core.management.base import BaseCommand
from django.conf import settings
from optparse import make_option
import os
# default dump commands, you can overwrite these in your settings.
MYSQLDUMP_CMD = getattr(settings, 'MYSQLDUMP_CMD', 'mysqldump --host=%(host)s --port=%(port)s --opt --complete-insert --compact --skip-add-locks -u"%(user)s" -p"%(password)s" %(database)s > %(filename)s')
SQLITE3DUMP_CMD = getattr(settings, 'SQLITE3DUMP_CMD', 'echo ".dump" | sqlite3 %(database)s > %(filename)s')
class Command(BaseCommand):
help = 'Complete dump of database of this project'
option_list = BaseCommand.option_list +(
make_option("--database", help="Select database to dump"),
)
def handle(self, *args, **options):
if not args:
print 'Write name of the outup file!\n'
return
else:
filename = args[0]
database = self.get_database_settings(options['database'])
if database['ENGINE'].endswith('mysql'):
cmd = MYSQLDUMP_CMD % dict(
host = database['HOST'],
port = database['PORT'],
user = database['USER'],
password = database['PASSWORD'],
database = database['NAME'],
filename = filename,
)
elif database['ENGINE'].endswith('sqlite3'):
cmd = SQLITE3DUMP_CMD % dict(
database = database['NAME'],
filename = filename,
)
else:
print "Sorry, dump_database only supports mysql and sqlite3 database backends.\n"
return
os.system(cmd)
def get_database_settings(self, database=None):
if database:
return settings.DATABASES[database]
try:
return settings.DATABASES['default']
except:
return {
'ENGINE' : settings.DATABASE_ENGINE,
'NAME' : settings.DATABASE_NAME,
'USER' : settings.DATABASE_USER,
'PASSWORD' : settings.DATABASE_PASSWORD,
'HOST' : settings.DATABASE_HOST,
'PORT' : settings.DATABASE_PORT,
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment