关系“mains_shop”不存在第 1 行:SELECT COUNT(*) AS “__count” FROM “mains_shop”
Posted
技术标签:
【中文标题】关系“mains_shop”不存在第 1 行:SELECT COUNT(*) AS “__count” FROM “mains_shop”【英文标题】:relation "mains_shop" does not exist LINE 1: SELECT COUNT(*) AS "__count" FROM "mains_shop" 【发布时间】:2021-03-17 07:09:58 【问题描述】:我正在构建一个 Web 应用程序,但遇到了一个错误。
我要做什么
我正在使用Gdal
、OSGeo
、Postgresql
、Postgis
制作一个GeoDjango
应用程序。全部安装成功。
教程 :- I am following this Tutorial
当我尝试在Django Admin
中打开Shop
面板时,它会一直显示给我
关系“mains_shop”不存在 第 1 行:从“mains_shop”中选择 COUNT(*) 作为“__count”
当我删除它并再次迁移时
然后显示
ValueError:字符串输入无法识别为 WKT EWKT 和 HEXEWKB。
但删除迁移正在解决ValueError
。
models.py
class Shop(models.Model):
name = models.CharField(max_length=100)
location = models.PointField()
address = models.CharField(max_length=100)
city = models.CharField(max_length=50)
admin.py
@admin.register(Shop)
class ShopAdmin(OSMGeoAdmin):
list_display = ('name', 'location')
settings.py
INSTALLED_APPS = [
'django.contrib.gis',
]
DATABASES =
'default':
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': '-------',
'USER': '-------',
'PASSWORD': '-------',
'HOST': 'localhost',
'PORT': '',
我尝试了什么
第一次出现错误时我认为GDal
不会安装然后我重新安装它并成功安装。
我已经重新安装了PostGis
。
我也看到了很多答案,但对我没有任何帮助。
我已经多次申请migrations
。
我也试过python manage.py migrate --fake
。
我不知道我做错了什么。
任何帮助将不胜感激。
提前致谢。
【问题讨论】:
您说您使用了python manage.py migrate --fake
,这可能是您遇到麻烦的原因。该命令的作用是将所有迁移标记为已在您的数据库中应用而不进行任何更改。您通常应该使用python manage.py makemigrations
,然后使用python manage.py migrate
。您使用的命令仅在您手动对数据库进行更改时使用。
当我执行makemigrations
和migrate
时,它仍然显示该错误。当我删除所有迁移和migrate again
时,仍然显示错误。
问题是所有迁移都已标记为已应用。我实际上不知道实际应用了多少迁移,所以我无法正确建议,但如果没有实际应用迁移,您可以尝试运行 python manage.py migrate --fake <appname> zero
将它们标记为未应用,然后再次尝试迁移。否则我能给出的唯一建议是删除数据库并再次迁移。
当我取消应用migrations
和migrate again
时会出现一个新错误django.db.utils.ProgrammingError: 关系“project_comment”已经存在
您需要找出您实际应用了哪些迁移,然后运行python manage.py migrate --fake <appname> <migration_really_applied>
,之后您需要迁移。如果您无法弄清楚,那么就像我上面所说的,删除数据库并再次迁移。
【参考方案1】:
我知道这不是最好的解决方案,但它对我有用。 在我手动删除数据库中的表后,我出现了这个问题。
我的解决方案:
-
首先,我删除了与错误日志中显示的模型相关的所有迁移文件。 (您应该删除与 Shop 模型相关的迁移)
更改模型名称。 (可以改成Shop2)
运行 makemigrations 和 migrate 命令
改回型号名称。 (再次将其更改为 Shop)
进行迁移并再次迁移
在这些步骤之后,问题为我解决了。 同样在这些步骤之后,您可以删除所有新的迁移文件并再次进行迁移以只有一个迁移文件。
【讨论】:
以上是关于关系“mains_shop”不存在第 1 行:SELECT COUNT(*) AS “__count” FROM “mains_shop”的主要内容,如果未能解决你的问题,请参考以下文章