簡體   English   中英

postgresql集成后Django中不存在關系錯誤

[英]Relation does not exist error in Django after postgresql integration

我在開發過程中使用了 sqlite3,然后將我的數據庫設置更改為 postgresql:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'test2',
    'USER': 'postgres',
    'PASSWORD': 'aman',
    'HOST': 'localhost',
    'PORT': '5432',
    }
}

無論我寫什么命令,它都會給我錯誤:

django.db.utils.ProgrammingError: relation "taksist_category" does not exist
LINE 1: ...st_category"."id", "taksist_category"."name" FROM "taksist_c...

類別模型存在於 taksist 應用程序中。 如果我將數據庫設置恢復到 sqlite3,則應用程序將成功運行。

我什至無法運行我的服務器。 即使我的模型 taksist/Category 有問題,我的應用程序也應該運行。 奇怪的是,無論寫什么命令,我都收到了這個錯誤。 我不能做 makemigrations、遷移、運行服務器。

我做了什么來解決這個問題:

  • 刪除遷移文件夾,並嘗試 makemigrations
  • 我在里面創建了init .py 的空遷移文件夾,並嘗試了 makemigrations
  • python manage.py migrate --fake

以上都沒有奏效。

這是 taksist.category 模型,以防萬一。

class Category(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length = 20)

    def __str__(self):
        return self.name

感謝您的任何幫助。 先感謝您。

“關系不存在”的根本原因是尚未運行遷移。

但是,通過評論:

無論我執行什么命令,我都會收到此錯誤。 甚至 runserver、makemigrations 和 migrate。 將數據庫設置更改為 postgresql 后,我無法遷移。 我無能為力。

這可能意味着您編寫的應用程序在初始化時訪問數據庫的方式,例如類似

from my_app.models import Blog

default_blog = Blog.objects.get(pk=1)

def view(...):

這意味着 Django 將在導入該模塊后立即嘗試訪問數據庫。 如果在 Django 嘗試為migrate初始化自身時導入了該模塊,則會出現異常。

您可以查看django.db.utils.ProgrammingError的回溯以找出違規訪問是什么並修復它。 例如,使用get_default_blog()函數可以更好地為上述模式提供服務。

如果我將數據庫設置恢復到 sqlite3,則應用程序將成功運行。

這個錯誤還意味着,如果您重命名或刪除當前正在運行的 SQLite 數據庫,您也無法獲得新的數據庫,因為嘗試migrate它會失敗並出現類似的錯誤。 這不僅僅是 Postgres 的“錯誤”。

如果是測試數據庫執行py manage.py flush命令,然后再次運行py manage.py makemigrations ,然后運行py manage.py migrate命令。

那應該可以解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM