¿Cómo puedo automáticamente que syncdb añadir una columna (no completa la migración es necesario)

Cuando hago un cambio a mis modelos (sólo para agregar una columna durante el desarrollo!), Django no emitir ningún ALTER TABLE declaraciones a la actualización de la base de datos. Es allí una manera de conseguir esta implementado o trabajado de todo? – otros, a continuación, añadir las columnas manualmente?


Nota realmente no estoy buscando una completa solución de migración, sólo algo que me permite mantener la codificación como puedo agregar columnas en el camino.

InformationsquelleAutor vdboor | 2010-10-13

5 Kommentare

  1. 23

    Uso python manage.py sqlclear YOURAPP en conjunción con dumpdata y loaddata (versión simplificada de respuesta por fish2000, que también utiliza una aplicación específica):

    DB=/path/to/db.sqlite3
    APP=YOURAPPNAME
    tmpdate=$(date "+%Y%m%d-%H%M%S")
    
    echo "+ Dumping django project database to fixture DUMP-${tmpdate}.json ..." &&\
    python manage.py dumpdata $APP --format='json' --indent=4 --verbosity=1 > datadumps/DUMP-${tmpdate}.json &&\
    echo '+ Backing up sqlite binary store...' &&\
    cp $DB $DB.bk &&\
    echo '+ Rebuilding database structure from model defs...' &&\
    python manage.py sqlclear $APP &&\
    echo "+ Reloading project data from fixture dump DUMP-${tmpdate}.json ..." &&\
    python manage.py loaddata datadumps/DUMP-${tmpdate}.json
    • Si un modelo de django tiene una columna y una base de datos no – me da un error. Tiene esta trabajado para alguien más?
    • En las nuevas versiones de django (por ejemplo, 1,5) el comando a utilizar es la de python manage.py sqlclear en lugar de restablecer
  2. 5

    Lo siento, es un poco tarde, pero pensé que iba a publicar aquí de todos modos en caso de que alguien más está teniendo este problema. Si usted todavía está en desarrollo y todos sus datos son datos ficticios (lo que significa que usted no desea conservar nada de eso), entonces todo lo que tienes que hacer es borrar la base de datos y ejecutar syncdb de nuevo.

  3. 3

    Si no desea configurar las migraciones – usted puede ser capaz de utilizar un truco como este:

    export JANGY_PROJECT='/Users/fish/Dropbox/ost2/ost2'
    export BPYTHON_INIT_SCRIPT='${JANGY_PROJECT}/utils/django_shell_imports.py'
    export PYTHONPATH="${JANGY_PROJECT}:${PYTHONPATH}"
    
    alias jangy="python manage.py"
    alias bp="cd $JANGY_PROJECT && bpython --interactive $BPYTHON_INIT_SCRIPT"
    
    
    function jangyfresh () {
        tmpdate=$(date "+%Y%m%d-%H%M%S") &&\
        cd $JANGY_PROJECT &&\
        echo "+ Dumping django project database to fixture DUMP-${tmpdate}.json ..." &&\
        python manage.py dumpdata --format='json' --indent=4 --verbosity=1 > datadumps/DUMP-${tmpdate}.json &&\
        echo '+ Backing up sqlite binary store and taking database offline...' &&\
        mv sqlite/data.db sqlite/data.db.bk &&\
        echo '+ Rebuilding database structure from model defs...' &&\
        python manage.py syncdb &&\
        echo '+ Graceful-restarting Apache...' &&\
        sudo apachectl graceful &&\
        echo '+ Enabling write access on new sqlite file...' &&\
        chmod a+rw sqlite/data.db &&\
        echo "+ Reloading project data from fixture dump DUMP-${tmpdate}.json ..." &&\
        python manage.py loaddata datadumps/DUMP-${tmpdate}.json &&\
        echo '+ Rebuilding project database structure...'
    }

    … que lo que bash función es:

    1. Vuelca la base de datos fuera de un aparato,
      nombre con un sello de fecha/hora
    2. Copia de seguridad y elimina
      el binario archivo de base de datos (SQLite en este
      caso, que es relativamente fácil
      para eliminar el archivo en cuestión)
    3. Resyncs el la base de datos a partir de modelos (la regeneración de los binarios de archivo de base de datos)
    4. (opcional) Correcciones de la base de datos de los archivos permanentes (que dropbox puede tornillo con, en mi caso aquí)
    5. Vuelve a llenar el nuevo DB desde el último foco
    6. (opcional) se reinicia apache

    Puedo usar esto durante el desarrollo de vuelta las cosas y empezar de cero – a veces funciona si se agrega una columna, a veces se quejarán de la nueva definición de modelo de campo de no tener una columna de base de datos.

    En estos casos puedo ejecutar el comando editar el models.py archivo, elimine el archivo sqlite y volver a cargar el último accesorio.

    Obviamente, no hago esto en una producción de instalar, ni yo no recomendaría que.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea