【问题标题】:Change to PostgreSQL raise django.db.utils.OperationalError: no such table Error更改为 PostgreSQL raise django.db.utils.OperationalError: no such table 错误
【发布时间】:2019-07-04 03:33:55
【问题描述】:

我正在为 Django 项目使用默认 DB SQLite 进行开发,但现在我需要部署到 Heroku,所以我切换到了 PostgreSQL。但是,在部署过程中,我不断收到django.db.utils.OperationalError: no such table: 错误:

heroku logs --tail 中的完全错误:

2019-02-08T13:56:10.598144+00:00 app[web.1]: Internal Server Error: /catelogue/floor
2019-02-08T13:56:10.598152+00:00 app[web.1]: Traceback (most recent call last):
2019-02-08T13:56:10.598154+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/utils.py", line 85, in _execute
2019-02-08T13:56:10.598156+00:00 app[web.1]: return self.cursor.execute(sql, params)
2019-02-08T13:56:10.598158+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/django/db/backends/sqlite3/base.py", line 296, in execute
2019-02-08T13:56:10.598160+00:00 app[web.1]: return Database.Cursor.execute(self, query, params)
2019-02-08T13:56:10.598162+00:00 app[web.1]: sqlite3.OperationalError: no such table: product_floor

如您所见,SQLite 中应该有一个名为 product_floor 的表。

但问题是,我已经将数据库配置更新为 PostgreSQL,并删除了项目文件夹中的 SQLite3 文件。我还删除了所有迁移文件和缓存文件并再次运行python manage.py makemigrationspython manage.py migrate

当我将DEBUG 设置为true 并在本地浏览器中访问页面时,没有问题。但是当我访问在 URL *.herokuapp.com/product/*(使用数据库数据的页面)中提供的某些页面时,我得到了Server Error 500

我的models.py

from django.db import models
from django.conf import settings
from django.utils import timezone

class Floor(models.Model):
    name = models.CharField(max_length=20, verbose_name='floor name')
    image = models.ImageField(
        upload_to='floor',
        blank=True,
        editable=True,
        verbose_name='floor image'
    )
    image_height = models.PositiveIntegerField(null=True, blank=True, editable=False, default="340")
    image_width = models.PositiveIntegerField(null=True, blank=True, editable=False, default="340")
    desc = models.CharField(max_length=256, verbose_name='floor description')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='floor price')

    class Meta:
        app_label = 'product'

    def __str__(self):
        return self.name
### Add some classes with almost same fields

我的settings.py

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': '[DB NAME]',
        'USER': '[DB USER]',
        'PASSWORD': '[***]',
        'HOST': 'localhost',
        'PORT': '',
    }

谁能帮我解决这个问题?非常感谢!

【问题讨论】:

  • 显示该回溯的其余部分。最有可能的是,在迁移可以运行之前,某些东西正在尝试对导入进行 db 查询。
  • 从您的 heroku 日志中我们可以看到它没有切换到 postgresql 并尝试使用 sqlite 设置。您如何使用 postgresql 设置管理和部署最后一个版本?
  • @DanielRoseman 谢谢。我刚刚更新了问题。
  • @EminMastizada 我直接删除了根文件夹中的 SQLite 文件(也使用命令删除已安装的 sqlitedb)&& 将settings.py 中的数据库配置更改为问题中所述的内容&& 使用sudo -u postgres psql 创建数据库&& 授予用户所有权限 && 然后清理应用程序中的缓存和迁移 && 在本地运行项目(从 dev 设置更改但 ofcoz 我在再次部署到 Heroku 之前将其更改回来)以通过管理中心重新上传 img 和文件 && 运行 python manage.py makemigrations 和 @ 987654336@再次。
  • 不,这是我们需要的前一点。回溯不是以return self.cursor.execute(sql, params) 开头的;起点在哪里?

标签: python django postgresql sqlite heroku


【解决方案1】:

我终于得到了答案。看来我对db模型做了一个小改动,所以在本地migrate/makemigrations之后,建议部署后再次运行migrate。谢谢大家的建议。

【讨论】:

    猜你喜欢
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-03
    • 2022-01-14
    • 2020-11-07
    • 2018-06-18
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多