Django migrate: не создает таблицы
После некоторых ошибок я удалил свою базу данных, удалил все мои файлы миграции (я оставил init.py).
Теперь, когда я запускаю
python migrate.py makemigrations // It creates migrations correctly
python migrate.py migrate // It outputs "app.0001_initial OK"
Но абсолютно НЕТ таблица (связанная с моим приложением) создана. Только те, которые связаны с джанго.
И в таблице миграции моя миграция приложений отмечена, но таблица не была создана, как я уже сказал, это очень неприятно.
Вот выдержка моего файла миграции:
# -*- 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,
},
),
....
У вас есть идея, как его исправить?
Ответы
Ответ 1
Из Django docs Options.managed
: "Если False, для этой модели не будут созданы операции создания или удаления таблицы базы данных".
И я вижу, что вы
options={
'db_table': 'tblclients',
'managed': False,
},
Попробуйте установить managed=True
в модели.
Ответ 2
python manage.py migrate --fake APPNAME zero
Это сделает вашу миграцию подделкой.
Теперь вы можете запустить миграцию script
python manage.py migrate APPNAME
Будут созданы таблицы
и вы решили свою проблему.. Приветствия!
Ответ 3
В моем случае, что создало таблицы, было следующее:
python manage.py migrate --run-syncdb
Я использую Django 1.9.6.
Ответ 4
У меня такая же проблема:
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
Ответ 5
Пожалуйста, проверьте, если вы используете несколько баз данных в вашем проекте. Если настроено несколько баз данных, убедитесь, что база данных по умолчанию - это та, которую вы ищете.
Если значения по умолчанию и ожидаемая база данных отличаются, выполните команду ниже, указав на вашу конфигурацию базы данных.
python manage.py migrate $ app_name --database $ dbname_from_setting
Надеюсь это поможет.
Ответ 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
показывает миграции, и сайт администратора начал работать.
Ответ 7
Ответ зависит от того, есть ли у вас история миграций в папке вашего приложения. В моем случае я не... Я думаю, что удалил оригинальные сценарии миграции.
Следуя документации Django, я сделал следующее:
- Закомментируйте новые обновления в models.py
- Следуйте разделу Добавление миграций в приложения...
- Создайте миграции для того, что уже существует:
python manage.py makemigrations yourapp
- Сделайте фальшивое применение этих миграций (ниже указано, что таблицы уже существуют и не пытаться воссоздать):
python manage.py migrate --fake-initial
- Раскомментируйте изменения в model.py
-
Выполните шаги в разделе Рабочий процесс...
python manage.py makemigrations yourapp
python manage.py перенести
Ответ 8
Перейдите в свою базу данных и удалите все миграции для этого приложения,
возможно, вам придется удалить соответствующие таблицы.
postgres=# \c db_yourdb
db_yourdb=# delete from django_migrations where app='appName';
затем перейдите к своему коду и;
(venv)[email protected]:~/Desktop/project$ python manage.py makemigrations appName
(venv)[email protected]:~/Desktop/project$ python manage.py migrate appName
Чтобы полностью выполнить новую миграцию, сначала выполните необходимые удаления для миграции и, при необходимости, удалите таблицы;
(venv)[email protected]:~/Desktop/project$ find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
(venv)[email protected]:~/Desktop/project$ find . -path "*/migrations/*.pyc" -delete
наконец-то;
(venv)[email protected]:~/Desktop/project$ python manage.py makemigrations
(venv)[email protected]:~/Desktop/project$ python manage.py migrate
Узнайте больше о том, как сбросить миграцию
Ответ 9
Удалите миграции папок и повторно запустите. Меня устраивает