Kit*_*sto 91 django-1.7 django-migrations
南方已有类似的问题,但我已经开始使用Django 1.7进行我的项目,而不是使用South.
在开发过程中,已经创建了许多迁移,但是软件尚未完成,并且不存在必须迁移的数据库.因此,我想重置迁移,就像我当前的模型是原始模型并重新创建所有数据库一样.
建议的方法是什么?
编辑:从Django 1.8开始,有一个名为squashmigrations的新命令,它或多或少地解决了这里描述的问题.
kzo*_*rro 137
我懂了.我只想出来,这很好.
首先,清除迁移表:
./manage.py migrate --fake <app-name> zero
Run Code Online (Sandbox Code Playgroud)删除app-name/migrations/文件夹或内容.
进行迁移:
./manage.py makemigrations <app-name>
Run Code Online (Sandbox Code Playgroud)最后在不进行其他数据库更改的情况下整理迁移:
./manage.py migrate --fake <app-name>
Run Code Online (Sandbox Code Playgroud)tij*_*ijs 36
在Django 1.7版本的迁移中,曾经在南方的重置功能已被删除,有利于"压缩"迁移的新功能.这应该是控制迁移次数的好方法.
https://docs.djangoproject.com/en/dev/topics/migrations/#squashing-migrations
如果您仍然想从头开始,我假设您仍然可以通过清空迁移表并删除之后makemigrations再次运行的迁移.
Abd*_*rbi 22
我刚遇到同样的问题.这是我的解决方法.
#!/bin/sh
echo "Starting ..."
echo ">> Deleting old migrations"
find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
# Optional
echo ">> Deleting database"
find . -name "db.sqlite3" -delete
echo ">> Running manage.py makemigrations"
python manage.py makemigrations
echo ">> Running manage.py migrate"
python manage.py migrate
echo ">> Done"
Run Code Online (Sandbox Code Playgroud)
该find命令:http://unixhelp.ed.ac.uk/CGI/man-cgi?find
小智 7
假设这是你的项目结构,
project_root/
app1/
migrations/
app2/
migrations/
...
manage.py
remove_migrations.py
Run Code Online (Sandbox Code Playgroud)
您可以从上面指示的位置运行脚本remove_migrations.py以删除所有迁移文件.
#remove_migrations.py
"""
Run this file from a Django =1.7 project root.
Removes all migration files from all apps in a project.
"""
from unipath import Path
this_file = Path(__file__).absolute()
current_dir = this_file.parent
dir_list = current_dir.listdir()
for paths in dir_list:
migration_folder = paths.child('migrations')
if migration_folder.exists():
list_files = migration_folder.listdir()
for files in list_files:
split = files.components()
if split[-1] != Path('__init__.py'):
files.remove()
Run Code Online (Sandbox Code Playgroud)
如果你有一个精心设计的项目,手动删除可能会很累人.这为我节省了很多时间.删除迁移文件是安全的.我已经无数次地完成了这个任务而没有遇到任何问题......
但是当我删除迁移文件夹时,makemigrations或者migrate没有为我创建文件夹.该脚本确保迁移文件夹__init__.py保留,只删除迁移文件.
Run Code Online (Sandbox Code Playgroud)import os for root, dirs, files in os.walk(".", topdown=False): for name in files: if '/migrations' in root and name != '__init__.py': os.remove(os.path.join(root, name))
DELETE FROM django_migrations Where app in ('app1', 'app2');
./manage.py makemigrations
./manage.py migrate --fake
或者,您可以从这一切编写迁移
我尝试不同的命令,一些答案对我有帮助。在我的例子中,只有这个序列修复了 MYAPP 中迁移中损坏的依赖关系,并从头开始清理所有过去的迁移。
在执行此操作之前,请确保数据库已同步(例如,不要在此处添加新的模型字段或更改元选项)。
rm -Rf MYAPP/migrations/*
python manage.py makemigrations --empty MYAPP
python manage.py makemigrations
python manage.py migrate --fake MYAPP 0002
Run Code Online (Sandbox Code Playgroud)
其中 0002 是最后一个 makemigrations 命令返回的迁移编号。
现在您可以正常再次运行 makemigrations / migrate,因为迁移 0002 已存储但未反映在已同步的数据库中。
| 归档时间: |
|
| 查看次数: |
92220 次 |
| 最近记录: |