python測試開發django-72.刪除表后如何重新生成表


前言

在使用ORM建表的時候,由於需要對數據庫表的重新設計,需要刪除原表,並通過Django的ORM功能重新同步表。
刪除表之后,發現用 makemigrations 和 migrate 無法生成新的表了。

遇到問題

當我新建一個 Model ,同步完數據庫后,再修改里面的字段名稱,發現無法同步到數據庫,於是就把數據庫里面的整張表刪除了。
結果再同步數據庫就無法生成新的表了,就算刪除 migrations 目錄下的0001_initial.py文件也一樣。

# 新建了一個PersonIn類,繼承自models.Model,
class PersonIn(models.Model):
    uid = models.IntegerField(primary_key=True)
    name = models.CharField(max_length=30)
    agex = models.IntegerField()

刪除 migrations 目錄下的0001_initial.py文件

執行 makemigrations 和 migrate 無法生成新的表了

D:\soft\MyDjango>python manage.py makemigrations
Migrations for 'yoyo':
  yoyo\migrations\0001_initial.py
    - Create model PersonIn

D:\soft\MyDjango>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, yoyo
Running migrations:
  No migrations to apply.

D:\soft\MyDjango>

結果沒生成新的表

解決辦法1

如果刪除后,無法自動生成,首先想到的解決辦法,可以先查詢到建表的sql,自己去執行sql建表

python manage.py sqlmigrate your_app_name 0001

cmd執行上面的命令,your_app_name 換成自己的 app 名稱

D:\soft\MyDjango>python manage.py sqlmigrate yoyo 0001
BEGIN;
--
-- Create model PersonIn
--
CREATE TABLE `yoyo_personin` (`uid` integer NOT NULL PRIMARY KEY, `name` varchar(30) NOT NULL, `agex` integer NOT NULL);
COMMIT;

於是得到建表的SQL,去數據庫執行下就可以了

解決辦法2

上面的辦法只能從表面上解決問題,不能解決根本問題,根本的原因是因為在 django_migrations 表里面已經生成表記錄了。

執行 SQL 刪除app相關的記錄

delete from django_migrations where app=' your_app_name'

執行完成后,再執行makemigrations 和 migrate就可以同步成功了

D:\soft\MyDjango>python manage.py makemigrations
No changes detected

D:\soft\MyDjango>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions, yoyo
Running migrations:
  Applying yoyo.0001_initial... OK

看到 OK 說明成功了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM