Django 迁移:不创建表
Django migrate : doesn't create tables
在一些错误之后,我删除了我的数据库,删除了我所有的迁移文件(我离开了 init.py)。
现在,当我 运行
python migrate.py makemigrations // It creates migrations correctly
python migrate.py migrate // It outputs "app.0001_initial OK"
但绝对没有 table(与我的应用相关)已创建.只有与 django 相关的才是。
在迁移 table 中,我的应用程序迁移被标记为已完成,但没有像我所说的那样创建 table,这非常令人不快。
这是我的迁移文件的摘录:
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-02-18 21:59
from __future__ import unicode_literals
import colorful.fields
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Client',
fields=[
('id', models.AutoField(db_column='idtblclients', primary_key=True, serialize=False)),
('genre1', models.CharField(blank=True, max_length=10)),
('prenom1', models.CharField(blank=True, max_length=45)),
('nom1', models.CharField(blank=True, max_length=45)),
('genre2', models.CharField(blank=True, max_length=10)),
('prenom2', models.CharField(blank=True, max_length=45)),
('nom2', models.CharField(blank=True, max_length=45)),
('courriel', models.CharField(blank=True, max_length=45)),
('langue', models.CharField(blank=True, max_length=1)),
('numtel1', models.CharField(blank=True, db_column='NumTel1', max_length=20)),
('numtel2', models.CharField(blank=True, db_column='NumTel2', max_length=20)),
('numcivique', models.CharField(blank=True, db_column='NumCivique', max_length=15)),
('rue', models.CharField(blank=True, db_column='Rue', max_length=45)),
('ville', models.CharField(blank=True, db_column='Ville', max_length=45)),
('codepostal', models.CharField(blank=True, db_column='CodePostal', max_length=45)),
('timestamp', models.DateTimeField(blank=True, db_column='Timestamp', null=True)),
('zone', models.CharField(blank=True, db_column='Zone', max_length=45)),
],
options={
'db_table': 'tblclients',
'managed': False,
},
),
....
你知道如何解决它吗?
来自 Django 文档,Options.managed
:"If False, no database table creation or deletion operations will be performed for this model."
我看到你有
options={
'db_table': 'tblclients',
'managed': False,
},
尝试在模型中设置 managed=True
。
python manage.py migrate --fake APPNAME zero
这将使您迁移到假的。
现在您可以运行 迁移脚本
python manage.py migrate APPNAME
将创建表
你解决了你的问题..干杯!!!
我遇到同样的问题:
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
No migrations to apply.
按照以下步骤为您的应用创建表格。
Go to your app folder
1.delete migration folder.
2.python manage.py makemigrations.
3 Rename 0001_initial.py file to 0001_initial_manual.py.
4 python manage.py migrate APPNAME.
在此之后我的表格创建顺利。
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
Applying poll.0002_initial... OK
在我的例子中,创建表格的是这样的:
python manage.py migrate --run-syncdb
我正在使用 Django 1.9.6。
这就是我如何得到@JulienD 的答案:
- 我在 models.py 中将元数据添加到我的模型定义中:
class thing(models.Model):
name = models.CharField(max_length=200)
class Meta:
app_label = 'things'
managed = True
- 执行:
python manage.py makemigrations
- 执行:
python manage.py migrate
之后 python manage.py showmigrations
显示迁移,管理站点开始工作。
请检查您的项目中是否使用了多个数据库。如果配置了多个数据库,请检查默认数据库是否是您要查找的数据库。
如果默认数据库与您预期的数据库不同,运行 下面的命令指向您的数据库配置。
python manage.py 迁移 $app_name --数据库 $dbname_from_setting
希望对您有所帮助。
这个问题的答案取决于您的应用程序文件夹中是否已有迁移历史记录。就我而言,我没有……我想我删除了原始迁移脚本。
因此,根据 Django 文档,我执行了以下操作:
- 注释掉 models.py
中的新更新
- 关注部分 Adding migrations to apps...
- 为已经存在的内容创建迁移:
python manage.py makemigrations yourapp
- 伪造这些迁移(在表已经存在并且不尝试重新创建的情况下):
python manage.py migrate --fake-initial
- 取消注释 model.py
中的更改
按照 Workflow 部分中的步骤操作 ...
python manage.py makemigrations yourapp
python manage.py migrate
删除文件夹迁移和re-run。对我有用
先试试这个;
检查应用程序的迁移文件,如果迁移文件中有 创建模型 部分,请将其删除并重做迁移。即删除这个;
migrations.CreateModel(
姓名='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
我手动删除了其中一个 table,对我有用的技巧是执行以下步骤:
- 删除了迁移文件夹。
- 从数据库中删除了迁移:
从 django_migrations WHERE app='alerts_db';
中删除
- python manage.py 迁移 --运行-syncdb' before
- python manage.py makemigrations 'app_name'
- python manage.py 迁移 --fake
注意:之前我没有执行第 3 步,也没有创建 table。
我的 Django 版本:v3.0.5
我也遇到了这个问题,我所要做的就是解决这个问题(我使用的是 phpymyadmin):
1.进入 phpmyadmin 面板
选择我连接的数据库,清空名为django_migrations
的table
然后,我照常做了:python manage.py makemigrations app_name
最后:pythonmanage.py迁移app_name
瞧,大功告成 ;)
这适用于 Django v.3 :
从数据库中删除与您的应用程序相关的行:
DELETE FROM django_migrations WHERE app='<app_name>';
删除应用程序的迁移文件夹
终于
./manage.py makemigrations <app_name>
./manage.py migrate <app_name>
完成。 Table 已创建。
根据以下内容在 settings.py
中添加您的应用名称:
https://docs.djangoproject.com/en/3.2/ref/applications/
我最近遇到了这个问题,我发现问题是我的应用程序(也在设置中添加)以大写字母开头。
有趣的是,从未抛出任何错误来警告这一点,但我一直看到与该应用程序相关的某些表不存在的错误。
因此,请确保您的应用名称以小写字母开头,并且 python manage.py makemigrations <appName>
和 python manage.py migrate
我也遇到了类似的问题
py manage.py 迁移
要执行的操作:
应用所有迁移:admin、auth、contenttypes、session,token_blacklist
运行 迁移:
没有要应用的迁移。
最后查了很多方案,发现很多项目都是用同一个环境。我是另一个项目的 运行 manage.py。情况可能和我一样。如果情况与我的情况不同,那么上述所有解决方案都有效。
在一些错误之后,我删除了我的数据库,删除了我所有的迁移文件(我离开了 init.py)。 现在,当我 运行
python migrate.py makemigrations // It creates migrations correctly
python migrate.py migrate // It outputs "app.0001_initial OK"
但绝对没有 table(与我的应用相关)已创建.只有与 django 相关的才是。 在迁移 table 中,我的应用程序迁移被标记为已完成,但没有像我所说的那样创建 table,这非常令人不快。
这是我的迁移文件的摘录:
# -*- coding: utf-8 -*-
# Generated by Django 1.9 on 2016-02-18 21:59
from __future__ import unicode_literals
import colorful.fields
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
initial = True
dependencies = [
]
operations = [
migrations.CreateModel(
name='Client',
fields=[
('id', models.AutoField(db_column='idtblclients', primary_key=True, serialize=False)),
('genre1', models.CharField(blank=True, max_length=10)),
('prenom1', models.CharField(blank=True, max_length=45)),
('nom1', models.CharField(blank=True, max_length=45)),
('genre2', models.CharField(blank=True, max_length=10)),
('prenom2', models.CharField(blank=True, max_length=45)),
('nom2', models.CharField(blank=True, max_length=45)),
('courriel', models.CharField(blank=True, max_length=45)),
('langue', models.CharField(blank=True, max_length=1)),
('numtel1', models.CharField(blank=True, db_column='NumTel1', max_length=20)),
('numtel2', models.CharField(blank=True, db_column='NumTel2', max_length=20)),
('numcivique', models.CharField(blank=True, db_column='NumCivique', max_length=15)),
('rue', models.CharField(blank=True, db_column='Rue', max_length=45)),
('ville', models.CharField(blank=True, db_column='Ville', max_length=45)),
('codepostal', models.CharField(blank=True, db_column='CodePostal', max_length=45)),
('timestamp', models.DateTimeField(blank=True, db_column='Timestamp', null=True)),
('zone', models.CharField(blank=True, db_column='Zone', max_length=45)),
],
options={
'db_table': 'tblclients',
'managed': False,
},
),
....
你知道如何解决它吗?
来自 Django 文档,Options.managed
:"If False, no database table creation or deletion operations will be performed for this model."
我看到你有
options={
'db_table': 'tblclients',
'managed': False,
},
尝试在模型中设置 managed=True
。
python manage.py migrate --fake APPNAME zero
这将使您迁移到假的。 现在您可以运行 迁移脚本
python manage.py migrate APPNAME
将创建表 你解决了你的问题..干杯!!!
我遇到同样的问题:
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
No migrations to apply.
按照以下步骤为您的应用创建表格。
Go to your app folder
1.delete migration folder.
2.python manage.py makemigrations.
3 Rename 0001_initial.py file to 0001_initial_manual.py.
4 python manage.py migrate APPNAME.
在此之后我的表格创建顺利。
python manage.py migrate poll
Operations to perform:
Apply all migrations: poll
Running migrations:
Applying poll.0002_initial... OK
在我的例子中,创建表格的是这样的:
python manage.py migrate --run-syncdb
我正在使用 Django 1.9.6。
这就是我如何得到@JulienD 的答案:
- 我在 models.py 中将元数据添加到我的模型定义中:
class thing(models.Model):
name = models.CharField(max_length=200)
class Meta:
app_label = 'things'
managed = True
- 执行:
python manage.py makemigrations
- 执行:
python manage.py migrate
之后 python manage.py showmigrations
显示迁移,管理站点开始工作。
请检查您的项目中是否使用了多个数据库。如果配置了多个数据库,请检查默认数据库是否是您要查找的数据库。
如果默认数据库与您预期的数据库不同,运行 下面的命令指向您的数据库配置。
python manage.py 迁移 $app_name --数据库 $dbname_from_setting
希望对您有所帮助。
这个问题的答案取决于您的应用程序文件夹中是否已有迁移历史记录。就我而言,我没有……我想我删除了原始迁移脚本。
因此,根据 Django 文档,我执行了以下操作:
- 注释掉 models.py 中的新更新
- 关注部分 Adding migrations to apps...
- 为已经存在的内容创建迁移:
python manage.py makemigrations yourapp
- 伪造这些迁移(在表已经存在并且不尝试重新创建的情况下):
python manage.py migrate --fake-initial
- 取消注释 model.py 中的更改
按照 Workflow 部分中的步骤操作 ...
python manage.py makemigrations yourapp
python manage.py migrate
删除文件夹迁移和re-run。对我有用
先试试这个;
检查应用程序的迁移文件,如果迁移文件中有 创建模型 部分,请将其删除并重做迁移。即删除这个; migrations.CreateModel( 姓名='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
我手动删除了其中一个 table,对我有用的技巧是执行以下步骤:
- 删除了迁移文件夹。
- 从数据库中删除了迁移: 从 django_migrations WHERE app='alerts_db'; 中删除
- python manage.py 迁移 --运行-syncdb' before
- python manage.py makemigrations 'app_name'
- python manage.py 迁移 --fake
注意:之前我没有执行第 3 步,也没有创建 table。 我的 Django 版本:v3.0.5
我也遇到了这个问题,我所要做的就是解决这个问题(我使用的是 phpymyadmin):
1.进入 phpmyadmin 面板
选择我连接的数据库,清空名为django_migrations
的table然后,我照常做了:python manage.py makemigrations app_name
最后:pythonmanage.py迁移app_name
瞧,大功告成 ;)
这适用于 Django v.3 :
从数据库中删除与您的应用程序相关的行:
DELETE FROM django_migrations WHERE app='<app_name>';
删除应用程序的迁移文件夹
终于
./manage.py makemigrations <app_name> ./manage.py migrate <app_name>
完成。 Table 已创建。
根据以下内容在 settings.py
中添加您的应用名称:
https://docs.djangoproject.com/en/3.2/ref/applications/
我最近遇到了这个问题,我发现问题是我的应用程序(也在设置中添加)以大写字母开头。 有趣的是,从未抛出任何错误来警告这一点,但我一直看到与该应用程序相关的某些表不存在的错误。
因此,请确保您的应用名称以小写字母开头,并且 python manage.py makemigrations <appName>
和 python manage.py migrate
我也遇到了类似的问题
py manage.py 迁移 要执行的操作: 应用所有迁移:admin、auth、contenttypes、session,token_blacklist 运行 迁移: 没有要应用的迁移。
最后查了很多方案,发现很多项目都是用同一个环境。我是另一个项目的 运行 manage.py。情况可能和我一样。如果情况与我的情况不同,那么上述所有解决方案都有效。