当我对模型进行更改时(仅在开发期间添加列!),Django不会发出任何ALTER TABLE
语句来更新数据库。有没有办法实现或解决这个问题? - 其他然后手动添加列?
注意我并不是真的在寻找一个完全迁移的解决方案,只是让我在路上添加列时可以继续编码。
答案 0 :(得分:23)
将python manage.py sqlclear YOURAPP
与dumpdata
和loaddata
结合使用(fish2000的简化版本,也使用特定应用):
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
答案 1 :(得分:20)
使用迁移工具,例如South。
答案 2 :(得分:5)
抱歉,这有点晚了,但我想我会在这里发布,以防其他人遇到这个问题。如果您仍在开发中并且所有数据都是虚拟数据(意味着您不想保留任何数据),那么您所要做的就是删除数据库并再次运行syncdb。
答案 3 :(得分:4)
答案 4 :(得分:3)
如果您不想设置迁移 - 您可以使用这样的技巧:
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...'
}
... bash
函数的作用是:
我在开发过程中使用它来备份并从头开始 - 有时候如果你添加一个列就行了,有时它会抱怨新定义的模型字段没有数据库列。
在这些情况下,我运行命令,编辑models.py
文件,删除sqlite文件并重新加载最后一个夹具。
显然,我不是在生产安装上执行此操作,也不建议这样做。