对于想了解Django1.7-在进行makemigrations后运行迁移时,“无适用迁移”的读者,本文将是一篇不可错过的文章,并且为您提供关于Django-makemigrations-未检测到更改
对于想了解Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”的读者,本文将是一篇不可错过的文章,并且为您提供关于Django - makemigrations - 未检测到更改、Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换、Django 1.7-makemigrations无法检测到更改、Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途的有价值信息。
本文目录一览:- Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”
- Django - makemigrations - 未检测到更改
- Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换
- Django 1.7-makemigrations无法检测到更改
- Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途
Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”
我将Django1.7与夹层一起使用。我创建了简单的配置文件(根据Mezzanine文档),存储在单独的应用程序“配置文件”中:
class RoadmapProfile(models.Model): user = models.OneToOneField("auth.User") fullname = models.CharField(max_length=100, verbose_name="Full name")
创建迁移会返回:
Migrations for ''profiles'': 0001_initial.py: - Create model RoadmapProfile
当我运行“迁移配置文件”时:
Operations to perform: Apply all migrations: profilesRunning migrations: No migrations to apply.
问题是,当我尝试打开与mezzanine.accounts相关的任何页面(例如更新帐户)时,它崩溃并显示:
OperationalError at /accounts/update/no such column: profiles_roadmapprofile.fullname
我做错了什么?
答案1
小编典典听起来您的初始迁移被伪造了,因为该表已经存在(可能具有过期的架构):
https://docs.djangoproject.com/zh-CN/1.7/topics/migrations/#adding-
migrations-to-
apps
“这将为您的应用程序进行新的初始迁移。现在,当您运行migration时,
Django将检测到您已经进行了初始迁移,并且它想要创建的表已经存在,并将迁移标记为已应用 。”
否则你会得到一个没有这样的表错误:)
[编辑]您是否清理了已应用的迁移表?这也是非应用迁移的常见原因。
Django - makemigrations - 未检测到更改
我试图使用 makemigrations 命令在现有应用程序中创建迁移,但它输出“未检测到更改”。
通常我使用该startapp
命令创建新应用程序,但在创建该应用程序时并未将其用于该应用程序。
调试后,我发现它没有创建迁移,因为migrations
应用程序中缺少包/文件夹。
如果它不存在或我遗漏了什么,它会创建文件夹会更好吗?
答案1
小编典典要为应用创建初始迁移,请运行makemigrations
并指定应用名称。将创建迁移文件夹。
./manage.py makemigrations <myapp>
您的应用程序必须首先包含在其中INSTALLED_APPS
(在 settings.py 中)。
Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换
在1.6之前, Django只支持添加新的model到数据库, 而无法编辑或修改已经存在的model. 在当时, 这些Django缺失的功能可以通过South实现.
按照官方文档的说明,支持得最好的是postgresql数据库,其次是mysql,目前sqlite不能实现完整的migration功能。
1. 新的命令
Django 1.7 为我们带来了三个新命令:
migrate: 用于执行迁移动作
makemigrations: 基于当前的model创建新的迁移策略文件
sqlmigrate: 显示迁移的SQL语句
值得注意的是, migration是基于App的, 因此, 我们可以针对某些app不启用migration功能.
2. 如何使用
migrations的使用非常简单: 修改model, 比如增加field, 然后运行
python manager.py makemigrations
你的mmodel会被扫描, 然后与之前的版本作比较, 在app的migrations目录下生成本次迁移文件.
我们建议查看一下该迁移文件, 确保没有问题. 然后运行:
python manager.py migrate
migrate命令会进行比较, 并应用该迁移.
3. 从South到新的Django migrations
如果想从south升级到最新的django migration, 可以按以下步骤实现:
确保south中的migration全部被应用了
从 INSTALLED_APPS中移除south
删除每个app下migration目录中的所有文件, 除了__init__.py
运行python manager.py makemigrations, Django会初始化migration
运行python manager.py migrate, django会发现数据库和初始化的migration相同, 从而将他们标记为已应用
Django 1.7-makemigrations无法检测到更改
如何解决Django 1.7-makemigrations无法检测到更改?
如果要从django 1.6中制作的现有应用程序进行转换,则需要执行文档中列出的一个步骤(据我所知):
python manage.py makemigrations your_app_label
该文档没有明确表明你需要在命令中添加应用标签,因为它首先告诉你要做的是python manage.py makemigrations
失败。最初的迁移是在1.7版中创建的应用程序完成的,但是如果你来自1.6版,则不会进行。
解决方法
如标题所述,我似乎无法使迁移正常进行。
该应用程序最初的版本低于1.6,因此我了解到最初不会进行迁移,如果运行,python manage.py migrate我会得到:
Operations to perform:
Synchronize unmigrated apps: myapp
Apply all migrations: admin,contenttypes,auth,sessions
Synchronizing apps without migrations:
Creating tables...
Installing custom SQL...
Installing indexes...
Running migrations:
No migrations to apply.
如果我对中的任何模型进行了更改myapp
,它仍会像预期的那样未迁移。
但是如果我跑步,python manage.py makemigrations myapp
我会得到:
No changes detected in app ''myapp''
似乎与我运行命令的方式或方式无关紧要,它永远不会将应用程序检测为更改,也不会向应用程序添加任何迁移文件。
是否有任何方法可以迫使应用程序迁移并实质上说“这是我的工作基础”或其他内容?还是我错过了什么?
如果有帮助的话,我的数据库就是PostgreSQL。
Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途
生成一个临时文件
python manage.py makemigrations
这时其实是在该app下建立 migrations目录,并记录下你所有的关于modes.py的改动,比如0001_initial.py
数据库文件数据库没有增加新的表">但是这个改动还没有作用到数据库文件,数据库没有增加新的表
接着执行migrate,这时候才真的把作用到数据库文件,产生对应的表
根据临时文件生成数据库表
python manage.py migrate
执行这两条命令自动帮我们创建数据库和基本表
还可以利用这条命令修改djang orm 表结构
现在把models.py 表结构 字段 最大长度64 修改成60
from django.db import models
# Create your models here.
# 必须继承
# 表名叫cmdb_userinfo
class UserInfo(models.Model):
# django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql
# 用户名列,数据类型 字符串类型,指定长度
username = models.CharField(max_length=32)
password = models.CharField(max_length=64)
from django.db import models
# Create your models here.
# 必须继承
# 表名叫cmdb_userinfo
class UserInfo(models.Model):
# django默认隐藏着会帮你创建 一列id列 自增的,设置为主键,参考mysql
# 用户名列,数据类型 字符串类型,指定长度
username = models.CharField(max_length=32)
password = models.CharField(max_length=60)
现在表结构变了,需要再执行 python manage.py makemigrations ,python manage.py migrate 自动更新表结构
python manage.py makemigrations
Migrations for ''cmdb'':
cmdb\migrations\0002_auto_20181122_2336.py
- Alter field password on userinfo
python manage.py migrate
Operations to perform:
Apply all migrations: admin, auth, cmdb, contenttypes, sessions
Running migrations:
Applying cmdb.0002_auto_20181122_2336... OK
数据如果超过最大长度就丢了
总结 通过 python manage.py makemigrations , python manage.py migrate 都可以修改 表结构数据
关于Django 1.7-在进行makemigrations后运行迁移时,“无适用迁移”的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Django - makemigrations - 未检测到更改、Django 1.7 新数据迁移工具 (migrations) 的使用和如何从 South 升级转换、Django 1.7-makemigrations无法检测到更改、Django orm 中 python manage.py makemigrations 和 python manage.py migrate 这两条命令用途的相关信息,请在本站寻找。
本文标签: