【问题标题】:How to drop a specific Django table which uses PostgreSQL?如何删除使用 PostgreSQL 的特定 Django 表?
【发布时间】:2019-05-29 10:43:22
【问题描述】:

我想删除一个 Django UserModel 表,然后重新创建它。

或删除用户字段并通过python manage.py createsuperuser 使用新用户重新创建它


[注意]:

我的数据库是 docker 容器上的 PostgreSQL。

【问题讨论】:

  • 在您的终端docker run image_name sh -c "python manage.py dbshell" 中运行此命令。之后,您将能够运行 SQL 命令。然后运行DROP TABLE appname_modelname;
  • 它抛出此错误:命令错误:您似乎没有安装 psql 程序或在您的路径上
  • 你需要小心。如果您有其他与具有外键关系的 django 用户模型相关的模型,并且如果您在 sql 中传递 cascade 选项,则其他表可能会被删除。它在删除语句中也有效。您最终可能会丢失数据。

标签: django postgresql django-models


【解决方案1】:

连接到 psql 或使用 pgAdmin 连接到您的数据库 执行查询: 如果存在级联则删除表;

【讨论】:

    【解决方案2】:

    您是否尝试删除开发数据库(例如,在本地开发期间?)。

    在这种情况下,我通常喜欢取消应用和重新应用迁移,在重新应用之前对迁移进行任何我需要的更改。

    例如:

    $ python manage.py migrate auth zero
    $ python manage.py migrate auth
    

    这将破坏身份验证表 (Permission, Group, and User) 并在没有任何数据的情况下重新创建它们。

    如果您有其他依赖于身份验证的迁移,它们也将被回滚。在这种情况下,您只需将整个应用程序迁移回来:

    $ python manage.py migrate
    

    【讨论】:

    • 我正在处理这个错误:django.db.utils.ProgrammingError: table "app_name_userreportmodel" does not exist
    • 我猜UserReportModel 取决于其中一个身份验证模型,并且也被回滚了。只需运行 python manage.py migrate 即可将整个应用迁移回当前迁移所描述的状态。
    猜你喜欢
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 2023-02-08
    • 2017-01-05
    • 2018-03-07
    • 2017-09-03
    • 1970-01-01
    • 2019-02-27
    相关资源
    最近更新 更多