python manage.py migrate 不会在 postgres 数据库中进行任何更改

Posted

技术标签:

【中文标题】python manage.py migrate 不会在 postgres 数据库中进行任何更改【英文标题】:python manage.py migrate does not make any changes in the postgres database 【发布时间】:2015-10-21 07:22:02 【问题描述】:

这似乎是一个简单的问题,我不确定我做错了什么。 例如,如果我想通过更改在 models.py 中的一个类中添加一个新字段:

class FeedBack(models.Model):
    feedback = models.CharField(max_length=600)
    user = models.ForeignKey(User,default="")

class FeedBack(models.Model):
    feedback = models.CharField(max_length=600)
    email = models.CharField(max_length=100)
    user = models.ForeignKey(User,default="")

然后我运行

python manage.py makemigrations

python manage.py 迁移

一切看起来都很好,但实际上并没有在数据库中进行任何更改。尝试查看反馈表时,我收到以下异常:

列 IngressoMonitor_feedback.email 不存在

在表格上也使用 psql \d+ 显示电子邮件尚未添加

目前我可以只使用 psql 来添加和更改表,但我更喜欢在 models.py 中编写它,因为这对我来说似乎更容易。

【问题讨论】:

我也有同样的问题。 Django 1.3 版使用 south 进行迁移。 【参考方案1】:

确保包含该 models.py 文件的应用包含在项目设置文件的 INSTALLED_APPS 中。此外,除非您确定自己知道自己在做什么,否则请不要触摸应用程序迁移文件夹下的文件。还请确保您的设置文件中指定的数据库帐户具有必要的权限。

如果您最近更改了 Django 版本,这个link 可能对您有用。但无论如何都要试一试,在这种情况下为每个应用程序进行迁移:

python manage.py makemigrations app_name

如果一切都失败了,只需删除数据库的表,然后从头开始重新生成所有内容。但是,如果在某个时候,您弄乱了任何迁移文件,您可能希望在执行 makemigrations 之前删除所有这些文件,以确保您拥有一组新的且工作的迁移文件,可供 manage.py 处理。

【讨论】:

仅出于这个原因,我讨厌 Django。如果我必须删除所有表,迁移文件中的RenameField() 之类的方法是什么???? 我认为您不必删除所有表格。在这种情况下,我至少会从只删除受影响的开始。【参考方案2】:

您可能需要重置您的数据库用户或所有者密码,然后重试。在我的情况下,我必须使用此链接 here 重置默认 postgres 用户以不使用命令行中的任何密码。

然后尝试运行命令:python manage.py migrate,现在可以正常运行了。

不要忘记从 django 项目中设置您的配置:myprojectname/myprojectname/settings.py 文件。这里的例子是我的;

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'polling_db',
        'USER': 'postgres',
        'PASSWORD': '',
        'HOST': '127.0.0.1',
        'PORT': '5432',
    

【讨论】:

以上是关于python manage.py migrate 不会在 postgres 数据库中进行任何更改的主要内容,如果未能解决你的问题,请参考以下文章

初试django---python manage.py makemigrations以及python manage.py migrate

运行 python manage py migrate 时出错

python manage.py migrate 登陆错误

SyntaxError:Generator表达式必须是parenthezised / python manage.py migrate

尝试在 djangoFramework 项目上运行 python manage.py migrate 但收到错误

Manage.py migrate 在第 14 步“提供数据库”的 Heroku python“入门指南”中失败