在Django shell中如何从数据库中删除列?

在Django shell中如何从数据库中删除列?,django,django-models,Django,Django Models,以下是场景: 我没有访问psql提示符的权限 我确实可以访问python manage.py shell或shell\u plus 是否可以使用Django内部构件删除该数据库的一列?我知道这在理论上是可能的 欢迎有任何见解 这不应该是一个挑战,正如Cezar指出的那样,python manage.py dbshell应该像psql那样调用提示符 如果没有其他办法,您仍然可以通过它,因为Django允许从shell执行任意(原始)SQL。下面的代码段应该可以做到这一点: from djang

以下是场景:

  • 我没有访问
    psql
    提示符的权限
  • 我确实可以访问
    python manage.py shell
    shell\u plus
是否可以使用Django内部构件删除该数据库的一列?我知道这在理论上是可能的


欢迎有任何见解

这不应该是一个挑战,正如Cezar指出的那样,
python manage.py dbshell
应该像
psql
那样调用提示符

如果没有其他办法,您仍然可以通过它,因为Django允许从shell执行任意(原始)SQL。下面的代码段应该可以做到这一点:

from django.db import connection
cursor = connection.cursor()
cursor.execute("alter table table_name DROP column column_name")

您有权访问表所在的models.py文件吗?然后您可以删除该字段并运行
python manage.py makemigrations
python manage.py migrate
您知道后果吗?在python shell中删除列的目的是什么?如果你只是删除了一列,但在模型中保留了相应的字段,那么稍后它会咬你,你会尖叫。按照@Sam的建议执行:
python manage.py makemigrations
python manage.py migrate
。在部署应用程序时,这还有一个优点,即您可以轻松地从迁移中生成数据库结构。如果您可以访问
python manage.py shell
,那么您应该可以访问
python manage.py dbshell
。如果没有,我想知道在哪种情况下可以访问第一个,但不能访问后一个。