【发布时间】:2017-08-22 15:46:08
【问题描述】:
我的一个 django 应用程序中的模型出现问题。
我可以创建模型的实例,但是当我去访问它时,我得到一个错误:
# create and save model instance
user_form = UserSearchForm(user=user)
user_form.save()
# Then later
first_user_form = UserSearchForm.objects.all()[0]
(1146, "Table 'project.app_tablename' doesn't exist")
Request Method: GET
Request URL: http://10.0.75.1:8000/search/
Django Version: 1.9.5
Exception Type: ProgrammingError
Exception Value:
(1146, "Table 'project.app_tablename' doesn't exist")
Exception Location: /opt/project-venv/lib/python3.4/site-packages/MySQLdb/connections.py in query, line 280
Python Executable: /opt/project-venv/bin/python
Python Version: 3.4.3
Python Path:
['/opt/project/project',
'/opt/project-venv/lib64/python34.zip',
'/opt/project-venv/lib64/python3.4',
'/opt/project-venv/lib64/python3.4/plat-linux',
'/opt/project-venv/lib64/python3.4/lib-dynload',
'/usr/lib64/python3.4',
'/usr/lib/python3.4',
'/opt/project-venv/lib/python3.4/site-packages']
Server time: Tue, 28 Mar 2017 22:50:16 +0000
我正在使用 Django 1.95,并从链接的答案 (https://stackoverflow.com/a/36565161/2516846) 中尝试了以下操作:
- 删除应用迁移文件夹
- 删除所有应用表,例如DROP TABLE search_usersearchform
- 从 db 中删除所有迁移:DELETE FROM django_migrations WHERE app = 'search'。
- python manage.py makemigrations search
- python manage.py 迁移
但是当我运行迁移时,它给出了错误:
django.db.utils.ProgrammingError: relation "search_usersearchform" already exists
总结:无法再次创建模型,因为关系已经存在,但无法访问我的应用程序中的模型,因为它说表不存在
是否有对此表/模型的引用存储在我需要删除的其他位置?如果我删除了表、删除了迁移文件夹并从 db 中删除了迁移,我不知道该关系是如何存在的
编辑
好的,终于解决了。
我的项目有两个数据库,“默认”数据库使用 postgres,“辅助”数据库使用 mysql。
当我在我的应用程序中创建一个新模型并运行迁移时,该表已添加到默认数据库中。
这使我能够创建新模型的实例。
但是,当我访问以前保存的实例时,我收到错误消息,指出该表不存在。
原来这是由我的应用程序 router.py 引起的,它将任何查询重定向到“辅助”数据库,该数据库当然没有表。
为了解决这个问题,我在 router.py 中的 db_for_write 和 db_for_read 方法中添加了条件,以将这些模型路由到“默认”数据库。
【问题讨论】:
-
你是如何从 Django 访问表的?显示给出错误的代码
-
对不起,这个堆栈跟踪是什么?
Request URL: http://10.0.75.1:8000/search/那是什么? -
你能在管理 shell 中运行它们吗?也请把你的模型。
-
您是删除了迁移文件夹还是仅删除了迁移文件?如果您刚刚删除了文件,请确保同时删除 .pyc 文件
-
是的,删除了整个文件夹,我怎么能从数据库中删除模型表,但我仍然可以运行 manage.py shell 并创建和导入/创建该模型的实例?
标签: python django postgresql