成功解決了django遷移時不能創建相應表或字段的問題

近期在適用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 NULL, `endtime` datetime(6) NOT NULL, `tankstime` datetime(6) NOT NULL, `finishtime` datetime(6) NOT NULL, `incometype` varchar(50) NOT NULL, `payedtime` datetime(6) NOT NULL, `completer_id` integer NOT NULL, `payer_id` integer NOT NULL, `projectname_id` integer NOT NULL, `receiver_id` integer NOT NULL);
--
-- Create model Result
--
CREATE TABLE `project_result` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL, `sort` integer NOT NULL);
--
-- Create model ResultList
--
CREATE TABLE `project_resultlist` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(300) NOT NULL, `resultno` varchar(50) NOT NULL, `p_starttime` datetime(6) NOT NULL, `p_overtime` datetime(6) NOT NULL, `p_testtime` datetime(6) NOT NULL, `p_checktime` datetime(6) NOT NULL, `p_audittime` datetime(6) NOT NULL, `p_approvetime` datetime(6) NOT NULL, `p_finishtime` datetime(6) NOT NULL, `isarchive` bool NOT NULL, `p_archivetime` datetime(6) NOT NULL, `ischeckout` bool NOT NULL, `p_checkouttime` datetime(6) NOT NULL, `desc` longtext NOT NULL, `p_approver_id` integer NOT NULL, `p_auditor_id` integer NOT NULL, `p_checker_id` integer NOT NULL, `projectleader_id` integer NOT NULL, `projectname_id` integer NOT NULL, `resultclass_id` integer NOT NULL);
CREATE TABLE `project_resultlist_completer` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `resultlist_id` integer NOT NULL, `userprofile_id` integer NOT NULL);
--
-- Create model ServiceClass
--
CREATE TABLE `project_serviceclass` (`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 Stage
--
CREATE TABLE `project_stage` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL, `desc` varchar(100) NOT NULL, `sort` integer NOT NULL);
--
-- Create model WorkFlow
--
CREATE TABLE `project_workflow` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `name` varchar(50) NOT NULL, `level` varchar(50) NOT NULL, `sort` integer NOT NULL, `desc` varchar(100) NOT NULL, `parent_id` integer NULL);
--
-- Create model WorkFlowLog
--
CREATE TABLE `project_workflowlog` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `staus` varchar(50) NOT NULL, `desc` varchar(300) NOT NULL, `addtime` datetime(6) NOT NULL, `name_id` integer NULL);
CREATE TABLE `project_workflowlog_executor` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `workflowlog_id` integer NOT NULL, `userprofile_id` integer NOT NULL);
CREATE TABLE `project_workflowlog_planners` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `workflowlog_id` integer NOT NULL, `userprofile_id` integer NOT NULL);
--
-- Create model WorkLoad
--
CREATE TABLE `project_workload` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `worktype` varchar(50) NOT NULL, `survey` varchar(50) NOT NULL, `size` integer NOT NULL, `desc` longtext NOT NULL, `projectname_id` integer NOT NULL, `resultname_id` integer NOT NULL);
--
-- Add field stage to resultlist
--
ALTER TABLE `project_resultlist` ADD COLUMN `stage_id` integer NOT NULL;
--
-- Add field resultname to reportlist
--
ALTER TABLE `project_reportlist` ADD COLUMN `resultname_id` integer NOT NULL;
--
-- Add field flow_status to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `flow_status_id` integer NULL;
--
-- Add field parent to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `parent_id` integer NULL;
--
-- Add field projectleader to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `projectleader_id` integer NOT NULL;
--
-- Add field resultclass to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `resultclass_id` integer NOT NULL;
--
-- Add field serviceclass to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `serviceclass_id` integer NOT NULL;
--
-- Add field stage to projectlist
--
ALTER TABLE `project_projectlist` ADD COLUMN `stage_id` integer NOT NULL;
--
-- Add field projectname to opinion
--
ALTER TABLE `project_opinion` ADD COLUMN `projectname_id` integer NOT NULL;
--
-- Add field replyer to opinion
--
ALTER TABLE `project_opinion` ADD COLUMN `replyer_id` integer NOT NULL;
--
-- Add field resultname to opinion
--
ALTER TABLE `project_opinion` ADD COLUMN `resultname_id` integer NOT NULL;
--
-- Add field category to addproject
--
ALTER TABLE `project_addproject` ADD COLUMN `category_id` integer NOT NULL;
--
-- Add field company to addproject
--
ALTER TABLE `project_addproject` ADD COLUMN `company_id` integer NOT NULL;
--
-- Add field contacter to addproject
--
CREATE TABLE `project_addproject_contacter` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `addproject_id` integer NOT NULL, `contacter_id` integer NOT NULL);
--
-- Add field operator to addproject
--
CREATE TABLE `project_addproject_operator` (`id` integer AUTO_INCREMENT NOT NULL PRIMARY KEY, `addproject_id` integer NOT NULL, `userprofile_id` integer NOT NULL);
--
-- Add field serviceclass to addproject
--
ALTER TABLE `project_addproject` ADD COLUMN `serviceclass_id` integer NOT NULL;
ALTER TABLE `project_category` ADD CONSTRAINT `project_category_parent_id_7d86555b_fk_project_category_id` FOREIGN KEY (`parent_id`) REFERENCES `project_category` (`id`);
ALTER TABLE `project_opinion` ADD CONSTRAINT `project_opinion_examiner_id_b905cb18_fk_users_userprofile_id` FOREIGN KEY (`examiner_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_category_id_ab847828_fk_project_category_id` FOREIGN KEY (`category_id`) REFERENCES `project_category` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_company_id_e5de518c_fk_customer_company_id` FOREIGN KEY (`company_id`) REFERENCES `customer_company` (`id`);
ALTER TABLE `project_projectlist_completer` ADD CONSTRAINT `project_projectlist__projectlist_id_8ed012f8_fk_project_p` FOREIGN KEY (`projectlist_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_projectlist_completer` ADD CONSTRAINT `project_projectlist__userprofile_id_14f6fffd_fk_users_use` FOREIGN KEY (`userprofile_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_projectlist_completer` ADD CONSTRAINT project_projectlist_comp_projectlist_id_userprofi_e6ce5ef2_uniq UNIQUE (`projectlist_id`, `userprofile_id`);
ALTER TABLE `project_reportlist` ADD CONSTRAINT `project_reportlist_completer_id_2a165270_fk_users_userprofile_id` FOREIGN KEY (`completer_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_reportlist` ADD CONSTRAINT `project_reportlist_payer_id_15079da0_fk_customer_contacter_id` FOREIGN KEY (`payer_id`) REFERENCES `customer_contacter` (`id`);
ALTER TABLE `project_reportlist` ADD CONSTRAINT `project_reportlist_projectname_id_e2f64d84_fk_project_p` FOREIGN KEY (`projectname_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_reportlist` ADD CONSTRAINT `project_reportlist_receiver_id_41c92eeb_fk_customer_contacter_id` FOREIGN KEY (`receiver_id`) REFERENCES `customer_contacter` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_p_approver_id_b58c79f3_fk_users_use` FOREIGN KEY (`p_approver_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_p_auditor_id_9b4e92bb_fk_users_userprofile_id` FOREIGN KEY (`p_auditor_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_p_checker_id_3b5ace84_fk_users_userprofile_id` FOREIGN KEY (`p_checker_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_projectleader_id_05d4a010_fk_users_use` FOREIGN KEY (`projectleader_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_projectname_id_742e18c8_fk_project_p` FOREIGN KEY (`projectname_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_resultclass_id_167c1ed1_fk_project_result_id` FOREIGN KEY (`resultclass_id`) REFERENCES `project_result` (`id`);
ALTER TABLE `project_resultlist_completer` ADD CONSTRAINT `project_resultlist_c_resultlist_id_f77fbe3f_fk_project_r` FOREIGN KEY (`resultlist_id`) REFERENCES `project_resultlist` (`id`);
ALTER TABLE `project_resultlist_completer` ADD CONSTRAINT `project_resultlist_c_userprofile_id_4fb91ec1_fk_users_use` FOREIGN KEY (`userprofile_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_resultlist_completer` ADD CONSTRAINT project_resultlist_compl_resultlist_id_userprofil_8b33f2ad_uniq UNIQUE (`resultlist_id`, `userprofile_id`);
ALTER TABLE `project_serviceclass` ADD CONSTRAINT `project_serviceclass_parent_id_eee1a688_fk_project_s` FOREIGN KEY (`parent_id`) REFERENCES `project_serviceclass` (`id`);
ALTER TABLE `project_workflow` ADD CONSTRAINT `project_workflow_parent_id_23f06b94_fk_project_workflow_id` FOREIGN KEY (`parent_id`) REFERENCES `project_workflow` (`id`);
ALTER TABLE `project_workflowlog` ADD CONSTRAINT `project_workflowlog_name_id_edcfb087_fk_project_workflow_id` FOREIGN KEY (`name_id`) REFERENCES `project_workflow` (`id`);
ALTER TABLE `project_workflowlog_executor` ADD CONSTRAINT `project_workflowlog__workflowlog_id_2b2f6fa6_fk_project_w` FOREIGN KEY (`workflowlog_id`) REFERENCES `project_workflowlog` (`id`);
ALTER TABLE `project_workflowlog_executor` ADD CONSTRAINT `project_workflowlog__userprofile_id_9998b256_fk_users_use` FOREIGN KEY (`userprofile_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_workflowlog_executor` ADD CONSTRAINT project_workflowlog_exec_workflowlog_id_userprofi_f95b7b3f_uniq UNIQUE (`workflowlog_id`, `userprofile_id`);
ALTER TABLE `project_workflowlog_planners` ADD CONSTRAINT `project_workflowlog__workflowlog_id_900e210a_fk_project_w` FOREIGN KEY (`workflowlog_id`) REFERENCES `project_workflowlog` (`id`);
ALTER TABLE `project_workflowlog_planners` ADD CONSTRAINT `project_workflowlog__userprofile_id_f84a9f02_fk_users_use` FOREIGN KEY (`userprofile_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_workflowlog_planners` ADD CONSTRAINT project_workflowlog_plan_workflowlog_id_userprofi_3f433784_uniq UNIQUE (`workflowlog_id`, `userprofile_id`);
ALTER TABLE `project_workload` ADD CONSTRAINT `project_workload_projectname_id_bc07d6e4_fk_project_p` FOREIGN KEY (`projectname_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_workload` ADD CONSTRAINT `project_workload_resultname_id_ba3b17c5_fk_project_result_id` FOREIGN KEY (`resultname_id`) REFERENCES `project_result` (`id`);
ALTER TABLE `project_resultlist` ADD CONSTRAINT `project_resultlist_stage_id_ccd056f8_fk_project_stage_id` FOREIGN KEY (`stage_id`) REFERENCES `project_stage` (`id`);
ALTER TABLE `project_reportlist` ADD CONSTRAINT `project_reportlist_resultname_id_1094f41e_fk_project_result_id` FOREIGN KEY (`resultname_id`) REFERENCES `project_result` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_flow_status_id_97026a0b_fk_project_w` FOREIGN KEY (`flow_status_id`) REFERENCES `project_workflow` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_parent_id_8ac9db87_fk_project_projectlist_id` FOREIGN KEY (`parent_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_projectleader_id_ec1ceab8_fk_users_use` FOREIGN KEY (`projectleader_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_resultclass_id_5b73ab02_fk_project_result_id` FOREIGN KEY (`resultclass_id`) REFERENCES `project_result` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_serviceclass_id_9b1a031f_fk_project_s` FOREIGN KEY (`serviceclass_id`) REFERENCES `project_serviceclass` (`id`);
ALTER TABLE `project_projectlist` ADD CONSTRAINT `project_projectlist_stage_id_47c193f3_fk_project_stage_id` FOREIGN KEY (`stage_id`) REFERENCES `project_stage` (`id`);
ALTER TABLE `project_opinion` ADD CONSTRAINT `project_opinion_projectname_id_11a7a823_fk_project_p` FOREIGN KEY (`projectname_id`) REFERENCES `project_projectlist` (`id`);
ALTER TABLE `project_opinion` ADD CONSTRAINT `project_opinion_replyer_id_40903950_fk_users_userprofile_id` FOREIGN KEY (`replyer_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_opinion` ADD CONSTRAINT `project_opinion_resultname_id_dd022fd7_fk_project_result_id` FOREIGN KEY (`resultname_id`) REFERENCES `project_result` (`id`);
ALTER TABLE `project_addproject` ADD CONSTRAINT `project_addproject_category_id_7c457c63_fk_project_category_id` FOREIGN KEY (`category_id`) REFERENCES `project_category` (`id`);
ALTER TABLE `project_addproject` ADD CONSTRAINT `project_addproject_company_id_9093615f_fk_customer_company_id` FOREIGN KEY (`company_id`) REFERENCES `customer_company` (`id`);
ALTER TABLE `project_addproject_contacter` ADD CONSTRAINT `project_addproject_c_addproject_id_d115f30f_fk_project_a` FOREIGN KEY (`addproject_id`) REFERENCES `project_addproject` (`id`);
ALTER TABLE `project_addproject_contacter` ADD CONSTRAINT `project_addproject_c_contacter_id_6cc2da6a_fk_customer_` FOREIGN KEY (`contacter_id`) REFERENCES `customer_contacter` (`id`);
ALTER TABLE `project_addproject_contacter` ADD CONSTRAINT project_addproject_conta_addproject_id_contacter__b64f25a4_uniq UNIQUE (`addproject_id`, `contacter_id`);
ALTER TABLE `project_addproject_operator` ADD CONSTRAINT `project_addproject_o_addproject_id_ba70eb38_fk_project_a` FOREIGN KEY (`addproject_id`) REFERENCES `project_addproject` (`id`);
ALTER TABLE `project_addproject_operator` ADD CONSTRAINT `project_addproject_o_userprofile_id_42573bb8_fk_users_use` FOREIGN KEY (`userprofile_id`) REFERENCES `users_userprofile` (`id`);
ALTER TABLE `project_addproject_operator` ADD CONSTRAINT project_addproject_opera_addproject_id_userprofil_fb87e510_uniq UNIQUE (`addproject_id`, `userprofile_id`);
ALTER TABLE `project_addproject` ADD CONSTRAINT `project_addproject_serviceclass_id_e6f81e99_fk_project_s` FOREIGN KEY (`serviceclass_id`) REFERENCES `project_serviceclass` (`id`);
COMMIT;

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章