Django丢弃表仍然存在

时间:2017-03-29 08:50:10

标签: python django postgresql

我的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. 删除所有应用表格,例如DROP TABLE search_usersearchform
  3. 从db删除所有迁移:DELETE FROM django_migrations WHERE app =' search'。
  4. python manage.py makemigrations search
  5. python manage.py migrate
  6. 但是当我运行迁移时,它会出错:

    django.db.utils.ProgrammingError: relation "search_usersearchform" already exists
    

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

    是否存在对此表/模型的引用,否则我需要删除哪些内容?如果我删除了表,删除了迁移文件夹并从db中删除了迁移,我不知道该关系是如何存在的那样

    修改

    好的,终于把它整理好了。

    我的项目有两个数据库,默认' db,使用postgres,以及' secondary' db,使用mysql。

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

    然而,当我去访问以前保存的实例时,我得到错误,表示该表不存在。

    原来这是由我的应用程序router.py引起的,它将任何查询重定向到' secondary' db,当然没有这个表。
    为了解决这个问题,我在router.py中的db_for_write和db_for_read方法中添加了条件,将这些模型路由到'默认值'分贝。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

python manage.py makemigrations
python manage.py migrate

然后只需恢复models.py中的模型代码并再次运行上述命令。

答案 2 :(得分:0)

遵循这些步骤应该解决它:

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