成功解决了django迁移时不能创建相应表或字段的问题

在django+xadmin开发中遇到数据库迁移问题,无法创建或更新字段。本文详细介绍了四种解决方案:删除migrations及记录、清空数据库、使用db migrate初始化、借助sql手动执行。通过这些方法,最终成功解决了数据库迁移问题。
摘要由CSDN通过智能技术生成

近期在适用django+xadmin做一个开发,但是在makemigrations和migrate之后,显示创建或更改了字段,数据库中缺没有创建或更改。

第一种解决办法:

删migrations目录、django_migrations中相关记录,然后执行

python manage.py makemigrations appname
python manage.py migrate 
#或
python manage.py migrate --fake appname
#基本上就能解决问题了。

但是,总是有但是。一次由于不小心,多删了django_migrations中记录,就试着干脆直接把表给干掉重新迁移得了,然后就是屡次的失败失败......这就有了第二种方案

第二种解决办法:

把整个数据库清空或重建(心里一万个草泥马啊,)然后老套路makemigrations/migrate,然后就是各种数据表缺失don't exist。然后一边百度一个一个appmigrate,最终才算弄好。为何重新删库、删记录文件后,不会自动一下子迁移成功呢?

第三种解决办法:

当数据库不在需要时(如表中参照性完整性、实体性完整性和用户自定义完整性需要修改的时候)(相当于drop数据库),我们可以利用migrate来重建数据库,而不需要去数据库中写原生SQL语句来建立数据库。

1、python manage.py db init

2、python manage.py db migrate -m "initial migration"

3、python manage.py db upgrade

当数据库表有更新时,需要执行
python manage.py inspectdb > appname/models.py 

python manage.py makemigrations

python manage.py migrate
这个方法没有试,比较郁闷所以就直接采用第四种了。

第四种解决办法:

这是在无奈之无奈花了两个晚上的时间,终于借助sql解决了。

因为在makemigrations的时候,生成的0001_initial.py文件里面就是models中的相应的字段和表,这就是最终的models。但为何没有执行?反正是没有找到为何没执行,在群里问了几个大神,貌似也没人理会这事儿。最后终于在翻看makemigrations的时候发现了sqlmigrate命令。

python manage.py sqlmigrate appname 迁移文件编号  #此处文件全名为0001_initial.py,则只写0001即可,多了不认。

 然后把BEGIN;COMMIT;之间的sql语句在sql管理工具或命令行中运行即可。如下:

D:\GeoSystem>python manage.py sqlmigrate project 0001
System check identified some issues:

WARNINGS:
?: (urls.W005) URL namespace 'xadmin' isn't unique. You may not be able to reverse all URLs in this namespace
BEGIN;
--
-- Create model AddProject
--
CREATE TABLE `project_addproject` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `tempname` varchar(300) NOT NULL, `workload` varchar(300) NOT NULL, `monovalent` varchar(20) NOT NULL, `total` varchar(20) NOT NULL, `status` varchar(20) NOT NULL, `addtime` datetime(6) NOT NULL, `isSign` bool NOT NULL, `isDo` bool NOT NULL);
--
-- Create model Category
--
CREATE TABLE `project_category` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL, `desc` varchar(100) NOT NULL, `sort` integer NOT NULL, `is_root` bool NOT NULL, `is_abort` bool NOT NULL, `parent_id` integer NULL);
--
-- Create model Opinion
--
CREATE TABLE `project_opinion` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `sort` varchar(50) NOT NULL, `flow` varchar(50) NOT NULL, `content` longtext NOT NULL, `addtime` datetime(6) NOT NULL, `reply` longtext NOT NULL, `replytime` datetime(6) NOT NULL, `desc` longtext NOT NULL, `examiner_id` integer NOT NULL);
--
-- Create model ProjectList
--
CREATE TABLE `project_projectlist` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(300) NOT NULL, `projectno` varchar(50) NOT NULL, `isroot` bool NOT NULL, `status` varchar(50) NOT NULL, `addtime` datetime(6) NOT NULL, `starttime` datetime(6) NOT NULL, `overtime` datetime(6) NOT NULL, `desc` longtext NOT NULL, `category_id` integer
NOT NULL, `company_id` integer NOT NULL);
CREATE TABLE `project_projectlist_completer` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `projectlist_id` integer NOT NULL, `userprofile_id` integer NOT NULL);
--
-- Create model ReportList
--
CREATE TABLE `project_reportlist` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `partname` varchar(300) NOT NULL, `elevation0` integer NOT NULL, `designedelevation` integer NOT NULL, `depth` integer NOT NULL, `starttime` datetime(6) NOT NU
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值