Python Django 1.8 migrate未创建表

Python Django 1.8 migrate未创建表,python,django,Python,Django,在执行python manage.py migrate之后,不会从我的models.py在数据库中创建表。它可以从django_会话等创建其他表。这里还有什么我需要遵循的吗?我遇到了类似的问题,刚刚解决了。我有多个数据库。我的本地数据库(未更新的)是一个MySQL数据库。其他的是MS SQL Server和MySQL。我有到其他数据库的路由器,因为我没有管理它们,并且(在Django 1.6中)使用路由器来指示allow_sync()=False。对于1.7,我将其更改为允许_migrate()

在执行python manage.py migrate之后,不会从我的models.py在数据库中创建表。它可以从django_会话等创建其他表。这里还有什么我需要遵循的吗?

我遇到了类似的问题,刚刚解决了。我有多个数据库。我的本地数据库(未更新的)是一个MySQL数据库。其他的是MS SQL Server和MySQL。我有到其他数据库的路由器,因为我没有管理它们,并且(在Django 1.6中)使用路由器来指示allow_sync()=False。对于1.7,我将其更改为允许_migrate()=False。但我没有为本地数据库添加路由器。如果没有,则默认值为allow_migrate()=False。因此,迁移只是以静默方式失败(引用:)。我为本地数据库添加了一个路由器,将allow_migrate()设置为返回True,现在我的迁移实际上创建了我的表。

这为我解决了问题(顺便说一下,我正在使用MySQL workbench):

  • 运行此sql:
    SET FOREIGN\u KEY\u CHECKS=0
  • 选择django数据库中的所有表(单击第一个表,然后按住shift键,然后单击最后一个表)。然后右键单击并选择“Drop n tables”(其中n是您刚刚选择的表数)
  • 然后运行
    python manage.py migrate
  • 最后通过运行以下sql恢复外键检查设置:
    SET foreign\u key\u CHECKS=1

注意:在采取这一极端措施之前,我尝试了他在评论中所说的,但仍然收到了“没有要应用的迁移”的消息。然而,这解决了这个问题。

在Django 1.10中,我遇到了类似的问题,上面的解决方案都不适合我

最终起作用的是运行此命令:

yekabathula-macbookair2:roster yekabathula$ python manage.py migrate
Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying api.0001_initial... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying sessions.0001_initial... OK
yekabathula-macbookair2:roster yekabathula$ python manage.py syncdb
/Library/Python/2.7/site-packages/django/core/management/commands/syncdb.py:24: RemovedInDjango19Warning: The syncdb command will be removed in Django 1.9
  warnings.warn("The syncdb command will be removed in Django 1.9", RemovedInDjango19Warning)

Operations to perform:
  Synchronize unmigrated apps: staticfiles, messages
  Apply all migrations: admin, contenttypes, api, auth, sessions
Synchronizing apps without migrations:
  Creating tables...
    Running deferred SQL...
  Installing custom SQL...
Running migrations:
  No migrations to apply.
这将重置所有迁移(到第零个状态)

随后是:

python manage.py migrate --fake myappname zero
为我创建了表格

如果您不想回滚到初始(零)状态,而是要对迁移号0005(上次有效的迁移)说,您可以改为执行以下操作:

python manage.py migrate myappname
然后继续实际迁移:

python manage.py migrate --fake myappname 0005
有关详细信息,请参见

  • 删除MySQL数据库中现有的模型表

  • 删除应用文件夹下的迁移文件夹

  • 删除表中的所有相对迁移记录
    来自MySQL的“django_迁移”

  • 现在您得到了清晰的模型和数据库。使用
    python manage.py makemigrations
    python manage.py migrate
    创建表


希望能帮助你。

我遇到了同样的问题。经过大量的挖掘,我找到了解决办法。 我正在使用django 1.11

如果你想重新开始

python manage.py migrate myappname
如果您有
reset\u db
,则可以使用
reset\u db
而不是第2步和第3步

1)delete all the files in your migrations folder except __init__.py
2)drop database
3)create database
4)python makemigrations
5)python migrate

在我的例子中,APP/migrations/文件夹中缺少
\uuuu init\uuuuuuuuuuy.py
文件。如果没有,它只需要一个空的
\uuuu init\uuuu.py
文件

  • 删除数据库
  • 删除
    迁移
    文件夹
  • 运行
    migrate
    命令
  • 运行
    makemigrations
    命令
  • 运行
    migrate
    命令

  • 它将完美地创建所有表。

    问题::当您第一次在django中应用迁移时,django将在数据库中创建该模型的表,并在其自己的文件(类)中的某处进行标记:

    • 然后,当您尝试更改该表的模式时,它会首先进行检查 如果
      initial=True

    • 如果未找到初始类属性,则迁移将被视为“初始”

    • 如果
      initial=True
      我们需要使用

      `initial = True` 
      
    对于初始迁移,Django检查数据库中是否已经存在所有这些表,如果存在,fake将应用迁移。类似地,对于添加一个或多个字段的初始迁移,Django会检查数据库中是否已经存在所有相应的列,如果存在,fake会应用迁移

    伪初始迁移同时使用CreateModel()和AddField()方法


    解决方案

    python manage.py migrate --fake-initial
    
    >python manage.py makemigrations
    >>python manage.py migrate--假首字母
    
    我正在使用MySQL,在删除迁移文件
    0001_initial.py
    和所有从DB演化而来的自定义表后,我开始讨论这个问题,试图重新生成所有这些表

    解决了此问题,只需在
    django_迁移
    表中删除这些行即可


    >代码> $Python Maung.pyMigase/Cuff>命令再次生成所有自定义表。

    < P>避免删除关键数据库,也可以考虑在类元:< /C> >下面的代码>代码>属性< /代码>:
    >> python manage.py makemigrations <AppName>
    >> python manage.py migrate --fake-initial
    
    然后,您可以运行
    makemigrations
    migrate
    ,然后将在models.py中创建表。

    Change managed=True(如果设置为False)

    class Blog(models.Model):
        category = models.CharField(max_length=100)
        title = models.CharField(max_length=100)
        date_added = models.DateTimeField()
        merits = models.CharField(max_length=300, blank=True)
        demerits = models.CharField(max_length=300, blank=True)
        class Meta:
            managed = True
            db_table = 'weblog'
            verbose_name_plural = "Blog"
    
        @property
        def content_min(self):
            return truncatechars(self.content, 50)
    

  • 如果只想为应用程序而不是所有应用程序执行此操作,请从数据库中的“django_migrations”表中清除应用程序迁移记录
  • Python manage.py MakeMigartions
  • 蟒蛇

  • 这可能是非常令人沮丧的,但这里有一个方法对我有效。 首先,如果已删除迁移文件,请继续并重新创建它

    class Meta:
        managed = True
        db_table = 'table_name'
    
    然后将迁移文件与SQL原始代码进行比较,如果合适,则应用迁移

    python manage.py makemigrations
    
    或者,您可以简单地从命令行或终端通过管道传输它

    python manage.py sqlmigrate [app_name] 0001
    python manage.py migrate
    
    注意:就我而言,我使用的是postgresql。虽然引擎和其他数据库语言类似,但您可能无法得到预期的结果

  • 在settings.py中从sqlite3更改为mysql
  • 确保您有关于数据库名称和用户名密码的正确信息
  • 删除现有迁移
  • 迁移
  • python manage.py makemigrations
    
    python manage.py sqlmigrate [app_name] 0001
    python manage.py migrate
    
    python manage.py sqlmigrate [app_name] 0001 | [psql] db_name username
    
    BEGIN
    CREATE TABLE
    ALTER TABLE
    COMMIT
    
    admin.site.register(model name)
    
    python manage.py inspectdb > models.py
    
    python manage.py makemigrations app_name 
    
    python manage.py migrate app_name