Python Django 1.8 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):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()
- 运行此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`
解决方案:
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>避免删除关键数据库,也可以考虑在>> 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)
到
这可能是非常令人沮丧的,但这里有一个方法对我有效。 首先,如果已删除迁移文件,请继续并重新创建它
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。虽然引擎和其他数据库语言类似,但您可能无法得到预期的结果
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