Django删除的表仍然存在

2024-05-17 01:06:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我的一个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)中尝试了以下操作:

  1. 删除应用程序迁移文件夹
  2. 删除所有应用程序表,例如删除表搜索\u usersearchform
  3. Delete all migrations from db:Delete from django_migrations WHERE app='search'。在
  4. Python管理.py进行迁移搜索
  5. Python管理.py迁移

但是,当我运行migrate时,会出现错误:

^{pr2}$

摘要:无法再次创建模型,因为关系已经存在,但无法访问我的应用程序中的模型,因为它说表不存在

是否有对存储在其他位置的此表/模型的引用需要删除?如果我删除了表,删除了migrations文件夹并从db中删除了migrations,我不知道这个关系是如何存在的

编辑

好吧,终于解决了。在

我的项目有两个数据库,一个是使用postgres的“default”数据库,另一个是使用mysql的“secondary”数据库。在

当我在应用程序中创建新模型并运行迁移时,表被添加到默认数据库中。
这使我能够创建新模型的实例。在

但是,当我访问以前保存的实例时,我得到一个错误消息,说表不存在。在

原来是我的应用程序造成的路由器.py,它将所有查询重定向到“secondary”数据库,该数据库当然没有该表。
为了解决这个问题,我向中的db_for_write和db_for_read方法添加了条件路由器.py,将这些模型路由到“默认”数据库。在


Tags: 实例py模型formproject数据库应用程序db
3条回答

备份模型.py,从原始代码中删除模型代码模型.py,然后运行:

python manage.py makemigrations
python manage.py migrate

然后简单地在中恢复模型代码模型.py再次运行上述命令。在

尝试删除或更改其中包含该模型的迁移文件,请注意依赖关系。然后再次运行python manage.py makemigrations,并且python manage.py migrate它应该再次创建模型。(我们说的是你的测试数据库对吗?)在

按照以下步骤进行修复:

  • 删除数据库。在
  • 创建一个同名的空文件。在
  • 或者,您可能需要为新数据库创建一个超级用户。在
  • 删除包迁移的内容(不是整个包),文件除外初始py. 在
  • 运行命令python manage.py makemigrations
  • 运行命令python manage.py migrate

相关问题 更多 >