Django迁移:不创建表

时间:2016-02-18 22:49:07

标签: python mysql django migration

发生一些错误后,我删除了我的数据库,删除了所有的迁移文件(我离开 init .py)。 现在,当我跑

n

但绝对 表格(与我的应用相关)已创建。只有那些与django相关的是。 在迁移表中,我的应用程序迁移已标记完成,但没有创建表,正如我所说,这非常令人不快。

以下是我的迁移文件的摘录:

python migrate.py makemigrations   // It creates migrations correctly
python migrate.py migrate          // It outputs "app.0001_initial OK"

你知道如何解决它吗?

11 个答案:

答案 0 :(得分:29)

python manage.py migrate --fake APPNAME zero

这会使您的迁移变为假冒。 现在您可以运行迁移脚本

python manage.py migrate APPNAME

将创建表格 你解决了问题..干杯!!!

答案 1 :(得分:14)

来自Django docs,Options.managed:"如果为False,则不会对此模型执行数据库表创建或删除操作。"

我看到你有

   options={
        'db_table': 'tblclients',
        'managed': False,
    },

尝试在模型中设置managed=True

答案 2 :(得分:6)

就我而言,创建表格的是:

python manage.py migrate --run-syncdb

我正在使用Django 1.9.6。

答案 3 :(得分:2)

我面临同样的问题:

python manage.py migrate poll
Operations to perform:
  Apply all migrations: poll
Running migrations:
  No migrations to apply.

按照以下步骤为您的应用创建表格。

  

转到您的应用文件夹

     

1.删除迁移文件夹。

     

2.python manage.py makemigrations。

     

3将0001_initial.py文件重命名为0001_initial_manual.py。

     

4 python manage.py迁移APPNAME。

在此之后我的表格顺利创建。

python manage.py migrate poll
Operations to perform:
  Apply all migrations: poll
Running migrations:
  Applying poll.0002_initial... OK

答案 4 :(得分:2)

我手动删除了其中一个表,对我有用的技巧是执行以下步骤:

  1. 删除了迁移文件夹。
  2. 从db删除了迁移: 从django_migrations WHERE app ='alerts_db'中删除;
  3. 之前将python manage.py迁移--run-syncdb'
  4. python manage.py makemigrations'app_name'
  5. python manage.py migration --fake

注意:之前我没有执行#3步骤,也没有创建表。 我的Django版本:v3.0.5

答案 5 :(得分:1)

请检查您的项目中是否使用了多个数据库。如果配置了多个数据库,请检查默认数据库是您要寻找的数据库。

如果默认数据库和期望的数据库不同,请在指向您的数据库配置的命令下面运行。

python manage.py迁移$ app_name-数据库$ dbname_from_setting

希望这会有所帮助。

答案 6 :(得分:1)

首先尝试这个;

检查应用程序的迁移文件,如果迁移文件中包含 create model 部分,则将其删除并重做迁移。即删除此;    migrations.CreateModel(         name ='YourModelName',              .......                 .....)

(venv)root@debian:~/Desktop/project$ python manage.py makemigrations appName
(venv)root@debian:~/Desktop/project$ python manage.py migrate appName

其他;导航到您的数据库并删除该应用程序的所有迁移, 您可能还必须删除相关表。

postgres=# \c db_yourdb
db_yourdb=# delete from django_migrations where app='appName';

然后转到您的代码,然后

(venv)root@debian:~/Desktop/project$ python manage.py makemigrations appName
(venv)root@debian:~/Desktop/project$ python manage.py migrate appName

要完全进行新的迁移,请先对迁移进行必要的删除,然后在需要时删除表;

(venv)root@debian:~/Desktop/project$ find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
(venv)root@debian:~/Desktop/project$ find . -path "*/migrations/*.pyc"  -delete

最后要做;

(venv)root@debian:~/Desktop/project$ python manage.py makemigrations
(venv)root@debian:~/Desktop/project$ python manage.py migrate

Read more here on how to reset migrations

答案 7 :(得分:0)

这就是我如何得到@ JulienD的工作答案:

  1. 我在models.py中添加了元数据def:
  2. class thing(models.Model): name = models.CharField(max_length=200) class Meta: app_label = 'things' managed = True

    1. 执行:
    2. python manage.py makemigrations

      1. 执行:
      2. python manage.py migrate

        之后python manage.py showmigrations显示迁移,管理网站开始工作。

答案 8 :(得分:0)

此问题的答案取决于您的应用文件夹中是否已有迁移历史记录。就我而言,我没有……我想我删除了原始迁移脚本。

所以按照Django文档,我做了以下工作:

  1. 注释出models.py中的新更新
  2. 关注Adding migrations to apps部分...
  3. 为现有内容创建迁移:
      

    python manage.py makemigrations yourapp

  4. 对这些迁移进行虚假应用(在表已经存在且不尝试重新创建的单打之下):
      

    python manage.py migration --fake-initial

  5. 取消注释model.py中的更改
  6. 按照Workflow部分中的步骤进行操作...

      

    python manage.py makemigrations yourapp

         

    python manage.py迁移

答案 9 :(得分:0)

我也有这个问题,我所要做的就是解决它(我使用的是 phpymyadmin):

1.进入 phpmyadmin 面板

选择我连接的数据库,并清空名为 django_migrations 的表

然后,我照常做了:python manage.py makemigrations app_name

最后:python manage.py migrate app_name

瞧,完成并准备好了;)

答案 10 :(得分:0)

这在 Django v.3 中有效:

  1. 从数据库中删除与您的应用程序相关的行:

    DELETE FROM django_migrations WHERE app='<app_name>';
    
  2. 删除应用的迁移文件夹

  3. 终于

    ./manage.py makemigrations <app_name>
    
    ./manage.py migrate <app_name>
    
  4. 完成。表已创建。