Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何自动让syncdb添加列(无需完全迁移)_Django_Django Models - Fatal编程技术网

Django 如何自动让syncdb添加列(无需完全迁移)

Django 如何自动让syncdb添加列(无需完全迁移),django,django-models,Django,Django Models,当我对模型进行更改时(仅在开发过程中添加一列!),Django不会发出任何ALTERTABLE语句来更新数据库。有没有办法实现或解决这个问题然后手动添加列 注意:我并不是真的在寻找一个完整的迁移解决方案,而是一种可以让我在添加列的过程中不断编码的解决方案。使用迁移工具,例如。如果您不想设置迁移,您可以使用如下技巧: 导出JANGY_项目='/Users/fish/Dropbox/ost2/ost2' export BPYTHON_INIT_SCRIPT='${JANGY_PROJECT}/ut

当我对模型进行更改时(仅在开发过程中添加一列!),Django不会发出任何
ALTERTABLE
语句来更新数据库。有没有办法实现或解决这个问题然后手动添加列



注意:我并不是真的在寻找一个完整的迁移解决方案,而是一种可以让我在添加列的过程中不断编码的解决方案。

使用迁移工具,例如。

如果您不想设置迁移,您可以使用如下技巧:

导出JANGY_项目='/Users/fish/Dropbox/ost2/ost2' export BPYTHON_INIT_SCRIPT='${JANGY_PROJECT}/utils/django_shell_imports.py' export PYTHONPATH=“${JANGY_PROJECT}:${PYTHONPATH}” 别名jangy=“python manage.py” alias bp=“cd$JANGY_项目和&bpython——交互式$bpython_初始化_脚本” 函数jangyfresh(){ tmpdate=$(日期“+%Y%m%d-%H%m%S”)&&\ cd$JANGY_项目&&\ echo“+将django项目数据库转储到fixture DUMP-${tmpdate}.json…”&&\ python manage.py dumpdata--format='json'--indent=4--verbosity=1>datadumps/DUMP-${tmpdate}.json&&\ echo“+备份sqlite二进制存储并使数据库脱机…”&&\ mv sqlite/data.db sqlite/data.db.bk&&\ echo“+从模型defs重建数据库结构…”&&\ python manage.py syncdb&&\ echo“+Apache…”&&\ sudo apachectl优雅&&\ echo“+启用对新sqlite文件的写访问…”&&\ chmod a+rw sqlite/data.db&&\ echo“+从fixture dump-${tmpdate}.json重新加载项目数据…”&&\ python manage.py loaddata datadumps/DUMP-${tmpdate}.json&&\ echo“+正在重建项目数据库结构…” } 。。。
bash
函数所做的是:

  • 将数据库转储到设备, 以日期/时间戳命名
  • 备份和删除 本文档中的二进制数据库文件(SQLite) 案例,相对来说比较容易 删除有问题的文件)
  • 从模型重新同步数据库(重新生成二进制数据库文件)
  • (可选)修复DB文件的perms(dropbox可以使用它,在我这里)
  • 重新填充上一个装置中的新DB
  • (可选)重新启动apache
  • 我在开发过程中使用它来备份并从头开始—有时如果您添加一个列,它会起作用,有时它会抱怨新定义的模型字段没有数据库列

    在这些情况下,我运行命令,编辑
    models.py
    文件,删除sqlite文件并重新加载最后一个夹具


    显然,我不会在生产安装上这样做,我也不建议这样做

    查看evolution

    python manage.py sqlclear YOURAPP
    dumpdata
    loaddata
    结合使用(fish2000的答案简化版,也使用特定的应用程序):


    抱歉,这有点晚了,但我想我会把它张贴在这里,以防其他人有这个问题。如果您仍在开发中,并且所有数据都是虚拟数据(意味着您不想保留任何数据),那么您所要做的就是删除数据库并再次运行syncdb

    可能重复的。。。在关于同一主题的许多其他问题中,我已经改写了一点。我想要的不是一个完整的迁移套件,而是在开发过程中快速添加列的东西。例如,
    syncdb
    发现缺少一列,并自动添加该列。@vbdoor:Django ORM中没有本机架构修改。在Django 1.7中,迁移似乎正在进行中:如果Django模型有一个列,而数据库没有,我会得到一个错误。这对其他人有用吗?在django的较新版本(例如1.5)中,要使用的命令是python manage.py sqlclear,而不是reset
    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